问题: 是否总有一种方法可以通过对表单产生影响来实现单击,使表单处于焦点状态?
背景: 在我的(C#win form)应用程序失焦后,我可以将表格悬停在阴影和边框上,指示我的鼠标位置。
单击例如菜单条目(文件),表单获得焦点,但文件菜单未获得单击。这需要额外点击。
对于表单上的普通按钮,只需单击一次。
答案 0 :(得分:3)
可以通过在单击发生之前设置焦点来修复此问题。 Se代码:
class ToolStripEx : System.Windows.Forms.ToolStrip
{
protected override void WndProc(ref Message m)
{
// WM_MOUSEACTIVATE = 0x21
if (m.Msg == 0x21 && this.CanFocus && !this.Focused)
{
this.Focus();
}
base.WndProc(ref m);
}
}
此方法也适用于MenuStrip
答案 1 :(得分:1)
我找到了一些有用的文章 - 尤其是Rick Brewster的this one。解决方案在于覆盖ToolStrip(或MenuStrip)的WndProc方法:
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (this.clickThrough &&
m.Msg == NativeConstants.WM_MOUSEACTIVATE &&
m.Result == (IntPtr)NativeConstants.MA_ACTIVATEANDEAT)
{
m.Result = (IntPtr)NativeConstants.MA_ACTIVATE;
}
}