首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

自定义组件事件应怎么正确使用,请各位帮忙

2012-02-15 
自定义组件事件应如何正确使用,请各位大虾帮忙.我现在做了一个组件,从Panel继承,并添加上了两个label,代码

自定义组件事件应如何正确使用,请各位大虾帮忙.
我现在做了一个组件,从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

试试看如何吧?

热点排行