在C#WinForms应用程序中是否可以单击未聚焦表单上的任何位置(以聚焦表单),而无需在点击点处聚焦/选择任何控件?
我试图模仿Excel的工作方式,如果单击未聚焦的Excel工作簿/工作表,它将聚焦(并带到工作簿/工作表),但不会更改所选的单元格。
答案 0 :(得分:3)
您可以覆盖WndProc
并处理WM_MOUSEACTIVATE
,然后检查当前表单是否为活动表单,将MA_ACTIVATEANDEAT
设置为激活窗口的结果,并丢弃鼠标消息。< / p>
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);
}
使用上面的代码,当您单击另一个表单或其中一个控件时,另一个表单激活,但单击的控件不会接收鼠标单击,而另一个表单上的活动控件不会更改。
答案 1 :(得分:0)
它使用2个处理程序,表单已停用且表单已激活:
private void Form_Activated(object sender, EventArgs e)
{
dataGridView1.Enabled = true;
}
private void Form_Deactivate(object sender, EventArgs e)
{
dataGridView1.Enabled = false;
}
如果你想要像这样通知控制,也可以使用DataGridView's
焦点处理程序。