C# 当在自定义控件外部单击时,该控件的瞬间将消失
我需要制作“工作时间表栏” 在MainForm有一个酒吧。当用户单击该栏时,将创建一个ctrlPin。 (ctrlPin是一个自定义控件,具有拖放方法。因此它与Mousedown、MouseMove和MouseUp事件复合) (很抱歉,我的帐户无法附加图像。但您可以通过此链接查看屏幕截图。) -单击时出现问题>>> 及 在mainFrom.vb中,将创建自定义控件的新瞬间 [MainForm.vb]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
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”变量。好了,行了,非常感谢。