2009-01-28 36 views
2

上午所有,Compact Framework的 - 負載期間禁用鼠標活動

我設計了一些Compact Framework應用程序,以及東西總是躲開我是一種預防方法就是我們所說的約克郡銀行綜合症(YBS)。 YBS在約克郡銀行的現金點後因其屏幕刷新速度非常緩慢而被親切地命名,並且我的一位同事按下按鈕兩次,認爲他沒有按下按鈕,最終取消了100英鎊他想要的20英鎊(「沒有收據的現金」和「100英鎊」按鈕被分配到兩個不同屏幕上的相同按鈕)。

基本上,我在應用程序的開始加載所有表單,並且每個窗體都有一個名爲Initialise()的公共事件。爲了顯示我使用Session.Instances.FormName.Initialise()的表單,然後執行showdialog()。 ()方法通常會調用某種形式的重置或數據加載,所以在該方法中也會設置Cursor。當用戶點擊一個按鈕來顯示一個表單,表單加載,但是如果他們在此期間單擊屏幕,該屏幕點擊會傳遞到當前正在加載的表單(但未顯示)。

例如,我點擊一個按鈕來顯示一個表格,然後點擊屏幕的左下角。在我的大多數CF應用程序中,右下角的按鈕是設置DialogResult.Cancel的後退按鈕。因此,一旦加載完成後,即使表單從未顯示,單擊後退按鈕時也不會顯示錶單。

我已經嘗試了一些東西,包括this.Enabled = false在Initialise()的開始,但似乎點擊存儲在後臺,然後點擊事件觸發到屏幕上時,負載已完成。

所以,我現在想知道是否有一種方法來禁止我的加載過程中的任何鼠標輸入,並只在我的Form.ShowDialog()之前再次啓用它?還是有人有任何更好的想法如何實現這一目標?

回答

2

Chris Tacke創建了ApplicationEx作爲OpenNETCF的一部分。它允許獲取您的應用程序收到的每條Windows消息。

有一個它的使用示例here

+0

另外一個例子: http://blog.opennetcf.com/ctacke/2007/05/07/SDFSampleGettingMouseUpAndMouseDownForControlsWithoutThoseEvents.aspx – ctacke 2009-01-28 13:55:09

0

我在年輕時候部署的一種粗略方法是設置一個計時器,將事件掛載到表單上的UI元素上。在那種情況下做了這項工作。

這些天我沒有太多的問題,特別是如果我預先載入表格。也許問題出現在顯示錶單時,在UI線程上執行某種形式的較長時間的數據操作?

如果你想進入「黑客」領域,你總是可以嘗試踢掉Application.DoEvents()的某個地方,以嘗試清除緩衝區。