vb.net点击按钮无效的toolbar

按钮

  
大家写程序的时候都会遇到现有控件不能满足要求的问题这时需要借助第三方控件或者自己重新改写现有控件。前者就不多说了网上找公司里找同学中找。如果是自己写呢我的体会如下
1.看清需求。知道自己想做什么需要完成什么样的功能。拿下面代码举例需求toolbarbutton必须为可用当左键点击toolbarbutton时由主程序来通过一些条件如用户是否按照规定的步骤操作判断是否忽略该消息忽略消息后界面应该没有任何变化。
2.寻找差距。找出自己想要的功能和现有控件的差别。拿下面代码举例现有控件toolbar中只要左键点击可用的toolbarbutton该button都会有所反映而需求是不让它有反应。
3.寻找现有控件如何实现差距。拿下面代码举例toolbar在绘制过程中没有使用可重写的onpaint方法所以重写onpaint方法不能完成需求。在哪能提取到重绘的信息呢WndProc。
4.设计好类的接口。之所以我们要重写现有控件是因为我们要使用它现在没有的功能所以把接口设计好对以后的修改大有裨益。拿下面代码举例提供给主程序的事件参数中就包含了toolbarbuttons可能以后主程序要根据鼠标的左右键作一些判断或修改一些外观。
5.开始编码。尽量规范以便以后修改、查看。
代码如下
Public Class clsToolBar
    Inherits ToolBar
    Public Event PreviewButtonClick As PreviewButtonClickHandler
    Private m_blnCanDown As Boolean = True
    Private Function ZGetMouseDownButton(ByVal point As Point) As ToolBarButton
        For Each _tbtn As ToolBarButton In Me.Buttons
            If _tbtn.Rectangle.Contains(point) Then
                Return _tbtn
            End If
        Next
        Return Nothing
    End Function
    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        If m.Msg = CInt(&H201) OrElse m.Msg = CInt(&H203) Then‘鼠标左键为&H201双击为&H203
            Dim _point As Point = Me.PointToClient(Me.MousePosition)
            Dim _tbtnTemp As ToolBarButton = ZGetMouseDownButton(_point)
            If Not _tbtnTemp Is Nothing Then
                Dim _args As New MyButtonClickEventArgs(MouseButtons.Left, _tbtnTemp)
                RaiseEvent PreviewButtonClick(Me, _args)
                If _args.Cancel Then
                    m_blnCanDown = False
                    Exit Sub
                End If
            End If
        End If
        If m.Msg = CInt(&HF) Then重画为&HF
            If m_blnCanDown = False Then
                Exit Sub
            End If
        End If
        If m.Msg = CInt(&H200) Then移动鼠标为&H200
            m_blnCanDown = True
        End If
        MyBase.WndProc(m)
    End Sub
End Class
Public Delegate Sub PreviewButtonClickHandler(ByVal s As Object, ByVal e As MyButtonClickEventArgs)
Public Class MyButtonClickEventArgs
    Private m_blnCancel As Boolean = False
    Private m_btnClick As MouseButtons
    Public Property Cancel() As Boolean
        Get
            Return Me.m_blnCancel
        End Get
        Set(ByVal Value As Boolean)
            Me.m_blnCancel = Value
        End Set
    End Property
    Public ReadOnly Property MouseButton() As MouseButtons
        Get
            Return Me.m_btnClick
        End Get
    End Property
    Public ToolBarButton As ToolBarButton
    Public Sub New(ByVal MouseButton As MouseButtons, ByVal button As ToolBarButton)
        Me.m_btnClick = MouseButton
        Me.ToolBarButton = button
    End Sub
End Class

时间: 2024-08-31 17:19:39

vb.net点击按钮无效的toolbar的相关文章

VB界面外点击按钮,界面内用什么事件可以处理?

问题描述 VB界面外点击按钮,界面内用什么事件可以处理? VB界面外点击按钮,界面内用什么事件可以处理?mouseup捕获不到有没有类似的事件可以调用呢? 解决方案 用mousemove事件处理,一样的原理.

java 点击按钮之后键盘事件无效

问题描述 startButton.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){Frame.setVisible(false);GameJFramegame=newGameJFrame();game.setVisible(true);game.requestFocus();System.out.println(startButton.isFocusOwner());}}); 一个JFra

VB写一工具,点击按钮调用bat文件,怎么将bat文件生成到工程中,

问题描述 我用VB写了一个小工具,通过界面上点击按钮后,调用bat文件,并执行.这一步完成了..现在的问题就是我生成工程(.exe)时,我的bat文件没有生成到工程中来..请问一下各位大虾,我这样做是否有问题... 解决方案 解决方案二:无论是VB6/VB.NET在Project打包的时候,把需要的相关文件添加进来就可了.解决方案三:用shell.run命令试试解决方案四:工程---属性---编译时包含的文件可以选择解决方案五:引用3楼ilmic的回复: 工程---属性---编译时包含的文件可以

winfrom疯狂频繁点击一个按钮,在button处理的时候 其他所有的点击都无效

问题描述 由于按钮事件中处理较多,所以运行时间会长一些,但是疯狂点击后,鼠标点多少次,在没处理完的那个一次点击后还排列很多这个事件,直到一个个运行完,如果点的次数过多,排队数量过多,软件会崩溃我的代码大意:privatevoidbtnselectxin_Click(objectsender,EventArgse)//button按钮事件调用的异步委托deleagtetimetie{if(jindu){if(btnselectxin.Enabled){btnselectxin.Enabled=fa

如何点击按钮弹出新窗口,输入数据后返回并刷新页面?

按钮|数据|刷新|页面 在一些.NET论坛中有人经常会问:如何在页面中点击按钮打开新页面,输入数据,然后返回到初始页面并进行更新?要解决这个问题,应该弄清楚window.showModalDialog()的用法,本人在http://www.csdn.net/Develop/read_article.asp?id=15113已经做过介绍.下面就用例子介绍如何在ASP.NET中实现这个功能. 本例子共3个页面,其中WebForm2.aspx是过渡页面,是为了防止提交时打开新页面. WebForm1.

使用JS代码实现点击按钮下载文件_javascript技巧

正文 有时候我们在网页上需要增加一个下载按钮,让用户能够点击后下载页面上的资料,那么怎样才能实现功能呢?这里有两种方法: 现在需要在页面上添加一个下载按钮,点击按钮下载文件. 题外话,这个下载图标是引用的 font-awesome 上面的.使用时,首先将 font-awesome 整个文件夹下载下来,利用bower或者是自己去官网上面下载都行. 将整个文件夹放在项目文件中之后,在页面上面引入css文件 <link href="libs/font-awesome-4.7.0/css/font

ase ctivity-BaseActivity下自定义actionbar中的button设置点击事件无效,代码见下。

问题描述 BaseActivity下自定义actionbar中的button设置点击事件无效,代码见下. package com.lyri.main.base; import com.example.LlsqPs.R; import android.app.ActionBar;import android.app.Activity;import android.app.ActionBar.LayoutParams;import android.content.Context;import and

点击按钮,鼠标显示小漏斗

问题描述 我做了一个网页,希望在点击按钮的时候,对数据进行处理过程中,数遍能显示小漏斗.网页设计使用ASP代码是用VB实现的,查了很多,大部分都是说用cssjs什么的但具体的都没有.请问各位高手给个代码呗就这么点分,我都给了 解决方案 解决方案二:鼠标改样式可以用JS设置就可以了,关键是你要异步实现这样的效果,所以你肯定要捕获处理完成这个事件,以便将鼠标的样式改回来,所以你需要用到AJAX.不然你的界面最多也就是处于一个"假死"的状态!<inputtype="butto

istview 按钮-Listview中第一个按钮无效,其他都正常

问题描述 Listview中第一个按钮无效,其他都正常 public View getView(final int position, View convertView, ViewGroup parent) { final ViewHolder holder; ListViewListener LvListener = null; if (convertView == null) { holder=new ViewHolder(); LvListener = new ListViewListen