gpt4 book ai didi

c# - 通过单击激活表单时防止表单中的焦点更改

转载 作者:太空宇宙 更新时间:2023-11-03 22:47:18 24 4
gpt4 key购买 nike

是否可以在 C# WinForms 应用程序中单击未聚焦窗体上的任意位置(以聚焦窗体),而无需在单击点聚焦/选择任何控件?

我试图模仿 Excel 的工作方式,如果您单击未聚焦的 Excel 工作簿/工作表,它将聚焦(并置于最前面)工作簿/工作表,但不会更改所选单元格。

最佳答案

您可以覆盖 WndProc和处理WM_MOUSEACTIVATE , 然后检查当前窗体是否不是事件窗体,将 MA_ACTIVATEANDEAT 设置为激活窗口的结果,并丢弃鼠标消息。

const int WM_MOUSEACTIVATE = 0x0021;
const int MA_ACTIVATEANDEAT = 2;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_MOUSEACTIVATE && Form.ActiveForm != this)
m.Result = (IntPtr)MA_ACTIVATEANDEAT;
else
base.WndProc(ref m);
}

使用上面的代码,当您单击另一个窗体或其一个控件时,另一个窗体将激活,但被单击的控件不会收到鼠标单击,并且另一个窗体上的事件控件不会更改。

关于c# - 通过单击激活表单时防止表单中的焦点更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49250340/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com