【发布时间】: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