【问题标题】:Compact Framework - Disable Mouse Events during loadsCompact Framework - 在加载期间禁用鼠标事件
【发布时间】:2010-10-03 23:24:51
【问题描述】:

早上好,

我设计了许多紧凑的框架应用程序,而我一直不明白的是一种防止我们所说的约克郡银行综合症 (ybs) 的方法。 YBS 以约克郡银行的现金点命名,因为他们的屏幕刷新非常慢,我的一位同事按了两次按钮,以为他没有按下按钮,最终提取了 100 英镑而不是他想要的 20 英镑(“没有收据的现金”和“100 英镑”按钮被分配到两个不同屏幕上的同一个按钮)。

基本上,我在应用程序启动时加载所有表单并带有初始屏幕,并且每个其他表单都有一个名为 Initialise() 的公共事件。为了显示一个表单,我使用了 Session.Instances.FormName.Initialise() 然后执行 showdialog()。

Initialise() 方法通常会调用某种形式的重置或数据加载,因此相应的 Cursor 也会在该方法中设置。当用户单击按钮以显示表单时会出现问题,该表单会加载,但如果他们同时单击屏幕,则该屏幕单击会传递到当前正在加载的表单(但未显示)。

例如,我单击一个按钮以显示一个表单,然后单击屏幕的左下角。在我的大多数 CF 应用程序中,右下角的按钮是设置 DialogResult.Cancel 的后退按钮。因此,一旦加载完成,表单就不会出现,因为单击了后退按钮,即使表单从未显示过。

我已经尝试了很多东西,包括在 Initialise() 开始时的 this.Enabled = false,但似乎点击存储在后台,然后在加载时触发点击事件到屏幕上完成了。

所以,我现在想知道是否有办法在加载过程中禁止任何鼠标输入,并且仅在 Form.ShowDialog() 之前再次启用它?或者是否有人对如何实现这一点有更好的想法?

【问题讨论】:

    标签: c# windows-mobile compact-framework .net-2.0


    【解决方案1】:

    Chris Tacke 创建 ApplicationEx 作为OpenNETCF 的一部分。它允许获取您的应用收到的每条 Windows 消息。

    有一个使用它的例子here

    【讨论】:

    【解决方案2】:

    我年轻时采用的一种粗略方法是设置一个计时器,以便在加载后将事件连接到表单上的 ui 元素。在那种情况下,它就完成了工作。

    这些天来,我没有遇到太多问题,尤其是在我预加载表单的情况下。也许问题在于在显示表单时在 UI 线程上执行某种形式的长数据操作?

    如果你想进入“黑客”领域,你总是可以尝试在某处启动 Application.DoEvents() 以尝试清除缓冲区。

    【讨论】:

      猜你喜欢
      • 2017-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      相关资源
      最近更新 更多