自定义组件事件应如何正确使用,请各位大虾帮忙.
我现在做了一个组件,从Panel继承,并添加上了两个label,代码如下:
Public Class ToleranceBox
Inherits System.Windows.Forms.Panel
Private Sub ToleranceBox_HandleCreated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.HandleCreated
LabLowTol.Parent = Me
LabHightTol.Parent = Me
LabHightTol.AutoSize = False
LabLowTol.AutoSize = False
LabLowTol.TextAlign = ContentAlignment.MiddleCenter
LabHightTol.TextAlign = ContentAlignment.MiddleCenter
LabHightTol.Location = New Point(0, 0)
LabHightTol.Size = New Size(Me.Size.Width , Me.Size.Height / 2)
LabLowTol.Location = New Point(0, Me.Size.Height / 2)
LabLowTol.Size = LabHightTol.Size
AddHandler LabLowTol.MouseMove, AddressOf LabLowTol_MouseMove
AddHandler LabHightTol.MouseMove, AddressOf LabHightTol_MouseMove
End Sub
Private Sub ToleranceBox_SizeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.SizeChanged
LabLowTol.Parent = Me
LabHightTol.Parent = Me
LabHightTol.Location = New Point(0, 0)
LabHightTol.Size = New Size(Me.Size.Width , Me.Size.Height / 2)
LabLowTol.Location = New Point(0, Me.Size.Height / 2)
LabLowTol.Size = LabHightTol.Size
End Sub
End Class
现在我将这个组件添加到我的一个form上,添加上的名称如为"ToleranceBox1",我想执行ToleranceBox1_mousemove事件,但没有反应,好像是鼠标只能在那两个Label上移动,在ToleranceBox1上捕捉不到mouse的事件.
请各位大虾帮忙如何才能执行ToleranceBox1上的mouse事件,而不执行LabHightTol或LabLowTol上的mouse事件,因为我想执行控件的拖动操作.
[解决办法]
用得着这么麻烦吗?
参考下面代码:
添加一个用户控件(UserControl)ToleranceBox,上面放置一个Panel控件,设置Dock属性为Fill即可
然后再在Panel中添加两个标签:LabHightTol、 LabLowTol
用户控件代码:
Public Class ToleranceBox
Public Shadows Event MouseMove(ByVal sender As Object, ByVal p As Point)
Private old As Point
Private Sub ToleranceBox_SizeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.SizeChanged
LabHightTol.Location = New Point(0, 0)
LabHightTol.Size = New Size(Me.Size.Width, Me.Size.Height / 2)
LabLowTol.Location = New Point(0, Me.Size.Height / 2)
LabLowTol.Size = LabHightTol.Size
End Sub
Private Sub LabHightTol_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles LabHightTol.MouseDown, LabLowTol.MouseDown
old = e.Location
End Sub
Private Sub LabHightTol_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles LabHightTol.MouseMove, LabLowTol.MouseMove
If e.Button = Windows.Forms.MouseButtons.Left Then
Dim p As Point = New Point(e.X - old.X, e.Y - old.Y)
RaiseEvent MouseMove(Me, p)
End If
End Sub
End Class
测试窗体中放置一个上面自定义控件的实例
代码如下:
Public Class frmMain
Private Sub ToleranceBox1_MouseMove(ByVal sender As Object, ByVal p As System.Drawing.Point) Handles ToleranceBox1.MouseMove
Dim pt As Point = ToleranceBox1.Location
pt.Offset(p)
ToleranceBox1.Location = pt
End Sub
End Class
试试看如何吧?