我的应用程序有时会与另一个线程中的服务器进行通信,而此时表单应该被锁定(这意味着用户不能激发任何Click
、KeyDown
…事件)。在这段时间里,显示了一个带有加载圆圈的等待覆盖,它阻止了任何鼠标事件,如单击或鼠标悬停
但问题是,用户可以通过按键触发KeyDown事件,用户也可以在使用TAB键导航到按钮后通过按enter键进行鼠标单击。
我知道Form.Enabled = true;
可以做到,但形式看起来很难看。我也知道我可以制作一个bool inaction;
,然后在事件处理程序中查看这个var,但我认为有更好的方法
缩写:如果没有.Enabled=True,如何从窗体中阻止诸如Click或KeyDown之类的GUI事件
任何帮助都将不胜感激。
编辑:通过将其添加到覆盖控件来解决此问题:
protected override bool ProcessKeyMessage(ref Message m)
{
return true;
}
protected override bool ProcessTabKey(bool forward)
{
return true;
}
您可以将表单的KeyPreview
属性设置为false。
当KeyPreview
为false时,在将事件传递给具有焦点的控件之前,表单将不会接收关键事件。如果您将焦点更改为一些不与键交互的未使用控件,则等待键事件的窗体或任何控件都不会接收到任何事件。