0

VB.Net 2008 速成版

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

请注意,当从另一个窗口/窗体返回时,不属于 ToolStrip 一部分的“Form1”上的普通按钮在第一次单击时起作用!!!!????

4

1 回答 1

1

这是标准行为。如果 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
于 2011-08-19T12:41:45.083 回答