阻止Form / UserControl中的事件

时间:2013-02-05 12:36:38

标签: c# .net winforms user-interface

我的应用程序有时会在另一个线程中与服务器进行通信,而此时应该锁定表单(这意味着,用户无法触发任何ClickKeyDown ....事件)。在这个时候,会显示一个带有加载圈的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;
}

1 个答案:

答案 0 :(得分:1)

您可以将表单的KeyPreview属性设置为false。

KeyPreview为false时,在将事件传递给具有焦点的控件之前,表单不会收到关键事件。如果您将焦点更改为某些未与键交互的未使用控件,则表单或等待键事件的任何控件都不会收到任何事件。