Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 工具条容器工具条失去焦点并双击_Vb.net_Button_Double Click_Toolstrip - Fatal编程技术网

Vb.net 工具条容器工具条失去焦点并双击

Vb.net 工具条容器工具条失去焦点并双击,vb.net,button,double-click,toolstrip,Vb.net,Button,Double Click,Toolstrip,VB.NET2008快速版 “Form1”有一个ToolStripContainer1.TopToolStripPanel,其中包含一个带有按钮的ToolStrip。当“Form1”处于活动状态时,按钮只需单击一次即可工作。如果单击另一个窗口,然后返回“Form1”,则ToolStrip按钮需要单击两次才能激活。第一次单击将焦点返回到“Form1”,随后的单击将触发button事件。我希望按钮能在第一次点击时工作,而不需要两次点击 请注意,当从另一个窗口/表单返回时,“表单1”上的普通按钮不是T

VB.NET2008快速版

“Form1”有一个ToolStripContainer1.TopToolStripPanel,其中包含一个带有按钮的ToolStrip。当“Form1”处于活动状态时,按钮只需单击一次即可工作。如果单击另一个窗口,然后返回“Form1”,则ToolStrip按钮需要单击两次才能激活。第一次单击将焦点返回到“Form1”,随后的单击将触发button事件。我希望按钮能在第一次点击时工作,而不需要两次点击


请注意,当从另一个窗口/表单返回时,“表单1”上的普通按钮不是ToolStrip的一部分,在第一次单击时就可以工作

这是标准行为。如果Microsoft Outlook没有焦点,并且您单击屏幕上可见的工具按钮,您可以看到它也会这样做

但您可以使用自己的版本覆盖该行为:

Public Class ToolStripEx
  Inherits ToolStrip

  Private Const WM_MOUSEACTIVE As Int32 = &H21

  Public Sub New()
    MyBase.New()
  End Sub

  Protected Overrides Sub WndProc(ByRef m As Message)
    If m.Msg = WM_MOUSEACTIVE AndAlso Me.CanFocus AndAlso Not Me.Focused Then
      Me.Focus()
    End If
    MyBase.WndProc(m)
  End Sub

End Class

天才。。。!第一次收到有效的答案是非常罕见的!有人能给我举个例子,说明你如何调用这个代码来停止这种行为吗?干杯@4rd2将标准ToolStrip控件替换为此控件。创建一个新的类文件,如示例中所示,重新生成解决方案,新的ToolStripEx控件应该在工具箱中可用。