阻止来自窗体/UserControl的事件

本文关键字:UserControl 事件 窗体 | 更新日期: 2023-09-27 17:57:37

我的应用程序有时会与另一个线程中的服务器进行通信,而此时表单应该被锁定(这意味着用户不能激发任何ClickKeyDown…事件)。在这段时间里,显示了一个带有加载圆圈的等待覆盖,它阻止了任何鼠标事件,如单击或鼠标悬停

但问题是,用户可以通过按键触发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;
}

阻止来自窗体/UserControl的事件

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

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