【问题标题】:Block Events from a Form/UserControl [duplicate]阻止来自表单/用户控件的事件 [重复]
【发布时间】:2013-02-05 12:36:37
【问题描述】:

我的应用程序有时会与另一个线程中的服务器通信,而此时应该锁定表单(这意味着用户无法触发任何ClickKeyDown .... 事件)。此时,带有加载圆圈的等待叠加层会显示阻止任何鼠标事件(如单击或鼠标悬停)。

但问题是,用户可以通过按键触发 KeyDown 事件,并且用户还可以通过在使用 TAB 键导航到按钮后按 Enter 来进行鼠标点击。

我知道Form.Enabled = true; 可以解决问题,但是表格看起来很丑。我也知道我可以创建一个bool inaction;,然后在事件处理程序中查看这个 var,但我认为有更好的方法。

短格式:如何阻止像 Click 这样的 GUI 事件或来自没有 .Enabled = True 的表单的 KeyDown?

任何帮助将不胜感激。

编辑:通过将其添加到覆盖控件来解决它:

protected override bool ProcessKeyMessage(ref Message m)
{
    return true;
}
protected override bool ProcessTabKey(bool forward)
{
    return true;
}

【问题讨论】:

标签: c# .net winforms user-interface


【解决方案1】:

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

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

【讨论】:

  • 谢谢,当我调用Waitoverlay.Focus() 时它可以工作,但是TAB-Key+ Enter 也可以单击按钮,请问您有解决方法吗?
  • 也许你可以注册到WaitOverlay中的关键事件并将事件参数的handled属性设置为true。
  • 嗯,好主意,但没成功,你有别的主意吗?
  • 那么也许你可以设置一个关于表单启用或禁用的属性;并在表单中注册按键事件,并根据新添加的属性设置事件参数的处理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-22
相关资源
最近更新 更多