C# 当在自定义控件外部单击时,该控件的瞬间将消失

C# 当在自定义控件外部单击时,该控件的瞬间将消失,c#,vb.net,visual-studio,mousemove,C#,Vb.net,Visual Studio,Mousemove,我需要制作“工作时间表栏” 在MainForm有一个酒吧。当用户单击该栏时,将创建一个ctrlPin。 (ctrlPin是一个自定义控件,具有拖放方法。因此它与Mousedown、MouseMove和MouseUp事件复合) (很抱歉,我的帐户无法附加图像。但您可以通过此链接查看屏幕截图。) -单击时出现问题>>> 及 在mainFrom.vb中,将创建自定义控件的新瞬间 [MainForm.vb] Private Sub picBar_Day01_MouseClick(send

我需要制作“工作时间表栏”

在MainForm有一个酒吧。当用户单击该栏时,将创建一个ctrlPin。 (ctrlPin是一个自定义控件,具有拖放方法。因此它与Mousedown、MouseMove和MouseUp事件复合)

(很抱歉,我的帐户无法附加图像。但您可以通过此链接查看屏幕截图。)

-单击时出现问题>>> 及

在mainFrom.vb中,将创建自定义控件的新瞬间

[MainForm.vb]

        Private Sub picBar_Day01_MouseClick(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles picBar_Day01.MouseClick
            Dim ctrlPin_01 As New ctrlPin(picBar_Day01, e.Location, "Break")
            ctrlPin_01.Ctrl_mouseDown(Me)  
            ctrlPin_01.Ctrl_mouseMove(Me)      
            ctrlPin_01.Ctrl_mouseUp(Me)        
            ctrlPin_01.Location = New System.Drawing.Point(e.Location.X , e.Location.Y )
            lblCtrlX.Text = ctrlPin_01.Location.X
            Me.Controls.Add(ctrlPin_01)
        End Sub      
在我的自定义控件(ctrlPin.vb)中,有三个拖放事件:mouseDown、mouseMove和mouseUpEvent。我需要从Mainfrm.vb调用所有事件,所以我创建了通过addHandle发送mainform的方法,然后通过addressOf调用事件

[ctrlPin.vb]

      Public Sub Ctrl_mouseMove(ByVal frm As Form)       
           AddHandler frm.MouseMove, AddressOf ctrlPin_MouseMove    
      End Sub
AddressOf将像这样调用自定义控件的内部事件

     Private Sub ctrlPin_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs)   Handles Me.MouseMove        
        If isDrag Then
            Me.Left += e.X - Me.m_intPosPin.X
        End If                     
     End Sub
好的,可以通过单击mainForm来拖动和移动它。但如果我将光标移到自定义控件之外,它就会消失


已解决: 我只是使用捕获函数来检测鼠标,而不是内部布尔标志(isDrag) 在mainForm.vb中,只需创建新的自定义控件

[mainForm.Vb]

    Private Sub picBar_Day01_MouseClick(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles picBar_Day01.MouseClick
        Dim ctrlPin_01 As New ctrlPin(picBar_Day01, e.Location, "Break")
        Me.Controls.Add(ctrlPin_01)
    End Sub
重要的是,在custome控件(ctrlPin.vb)中,只需将标志变量(isDrag)更改为“Me.Capture”。 这是工作

[ctrlPin.vb]

        Private Sub ctrlPin_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove     
           If Me.Capture Then                  
               Me.Left += e.X - Me.m_intPosPin.X
           End If        
        End Sub

这是我为这个项目设计的屏幕。>>你的控件需要鼠标事件,而不是窗体。我应该将什么值传递给自定义控件而不是mainForm?无,当控件的鼠标事件已经存在时,请删除这些值并选中“确定”。我理解。我不应该向自定义控件发送任何内容。但我必须使用“捕获”函数来检测鼠标。而不是“isDrag”变量。好了,行了,非常感谢。