0

我的应用程序有时会与另一个线程中的服务器通信,而此时应该锁定表单(这意味着用户不能触发任何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;
}
4

1 回答 1

1

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

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

于 2013-02-05T12:43:59.153 回答