• This event supports the .NET Framework infrastructure and is not intended to be used directly from your code?继承自VScrollbar的自定义winform控件,某些事件不触发的问题(Winform控件开发学习)


    继承自VScrollbar的自定义控件里的 onpaint 和一些鼠标事件 经过测试发现没有被触发执行,(准确的说.net 里与事件相关的方法没有被执行,而是通过操作系统去执行了其他方法)

    鼠标的事件比如 OnMouseClick 、OnMouseLeave、OnMouseDown等等在MSDN上有下面的注释:

    This event supports the .NET Framework infrastructure and is not intended to be used directly from your code

    在代码里overides了 下面的函数,调试发现事件并没有进入到相对应的方法里面来!

            Protected Overrides Sub OnMouseClick(ByVal e As System.Windows.Forms.MouseEventArgs)
                
    MyBase.OnMouseClick(e)
            
    End Sub

    这里的OnMouseClick 没有进入执行,实际上去执行操作系统的方法了。如何才能执行这个方法而不是去执行操作系统的方法呢?


    Onpaint事件如果不执行可以通过下列的方法来变相实现:

    通过 Overrides Sub WndProc 可以 捕捉消息变相实现 onpaint方法
     
           Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
                
    MyBase.WndProc(m)


                
    If m.Msg = WM_PAINT Then
                    
    Dim g As Graphics = Graphics.FromHwnd(Handle)
                    DrawScrollbar(g)
                    g.Dispose()
                
    End If
        
    End Sub



    但是鼠标的丰富事件消息在这里面是同一个ID,所以无法区分是哪个鼠标事件。


    后来在查看ControlStyles 的是否发现里面有 ControlStyles.UserMouse 、ControlStyles.StandardClick

    做了如下设置后,鼠标事件终于进入到上面的方法离去了

                 Me.SetStyle(ControlStyles.UserMouse, True)
                 Me.SetStyle(ControlStyles.StandardClick, True)


    以前提到的 OnMouseClick就执行到了。



  • 相关阅读:
    转:Contrastive Loss (对比损失)
    转:Siamese network 孪生神经网络
    pytorch的nn.MSELoss损失函数
    python创建包
    pytorch中如何在lstm中输入可变长的序列
    转:python中with的用法
    转:np.insert函数
    转:分类模型的评估指标
    Codeforces Round #525 (Div. 2) C. Ehab and a 2-operation task(构造)
    Educational Codeforces Round 53 (Rated for Div. 2) C. Vasya and Robot
  • 原文地址:https://www.cnblogs.com/adandelion/p/1121793.html
Copyright © 2020-2023  润新知