自定义控件事件传递过程

 

自定义控件事件传递过程

本人使用自定义控件发现如果自定义控件被另一个控件全部覆盖,当双击或 单击窗体时,事件引起控件事件不是主体事件,多次测试才找到这个技巧。

首先加一个自定义控件,然后在自定义控件窗体上添加一个PANEL控件,并让控件FILL全部面板,当控件实例化时,我们在操作拖拉主界面的上的控件时,能实现自定义控件,在自定义控件中首先要重写事件

Shadows Event MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs)
    Shadows Event MouseUp(sender As Object, e As System.Windows.Forms.MouseEventArgs)
    Shadows Event MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs)
‘新的事件要用shadows来覆盖原事件。接下来要对事件进行加载操作,并将panel对应的事件传递给主窗体对应的事件,这里需要'注意的传递事件,在传递时sender不是panel主体而是自定义控件的自身。所以要用ME来替代sender.
 Private Sub UcShow_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        AddHandler PanelTItle.MouseDown, AddressOf UcShow_MouseDown
        AddHandler PanelTItle.MouseUp, AddressOf UcShow_MouseUP
        AddHandler PanelTItle.MouseMove, AddressOf UcShow_MouseMove
    End Sub

    Private Sub UcShow_MouseDown(sender As Object, e As MouseEventArgs)
        RaiseEvent MouseDown(Me, e)
    End Sub

    Private Sub UcShow_MouseUp(sender As Object, e As MouseEventArgs)
        RaiseEvent MouseUp(Me, e)
    End Sub

    Private Sub UcShow_MouseMove(sender As Object, e As MouseEventArgs)
        RaiseEvent MouseMove(Me, e)
    End Sub


在主窗体中,使用时还要对相应的事件进行再次重写

    AddHandler ctlUcshow.MouseMove, AddressOf PictureBox_MouseMove
    AddHandler ctlUcshow.MouseUp, AddressOf PictureBox_MouseUp
    AddHandler ctlUcshow.MouseDown, AddressOf PictureBox_MouseDown


另要还要对委托执行的事件再次重写一下,这样此过程才能完成 、

Public X, Y As Integer

    Private Sub PictureBox_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        X = e.X : Y = e.Y
    End Sub
    Private Sub PictureBox_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
    End Sub
    Private Sub PictureBox_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)

        If Not MoveEnable Then Exit Sub
        If X = e.X And Y = e.Y Then Exit Sub
        If e.Button = Windows.Forms.MouseButtons.Left Then
            sender.Left = sender.Left + e.X - X
            sender.Top = sender.Top + e.Y - Y
        End If

    End Sub


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值