我的应用程序有时会在另一个线程中与服务器进行通信,而此时应该锁定表单(这意味着,用户无法触发任何Click
,KeyDown
....事件)。在这个时候,会显示一个带有加载圈的waitoverlay,它会阻止任何鼠标事件,如点击或鼠标悬停。
但问题是,用户可以通过按键来触发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;
}
答案 0 :(得分:1)
您可以将表单的KeyPreview
属性设置为false。
当KeyPreview
为false时,在将事件传递给具有焦点的控件之前,表单不会收到关键事件。如果您将焦点更改为某些未与键交互的未使用控件,则表单或等待键事件的任何控件都不会收到任何事件。