2017-04-03 76 views
1

我是新來的c#.NET Compact Framework 3.5。發生意外的鼠標點擊事件.NET Compact Framework 3.5

我想阻止急切的用戶的鼠標事件排隊。這有時會導致無意的點擊。

在.NET Compact Framework平臺上忽略排隊的鼠標消息的最佳方法是什麼?可悲的是,代碼必須在UI線程上運行。我試過: 1.禁用窗口和Application.DoEvents();然後啓用窗口 - >它沒有工作。 2.我讀了很多關於PeekMessage() - >但無法弄清楚。

請推薦我可以學習的資源。

非常感謝。

回答

1

像這樣的事情

class MyForm : Form 
{ 
    private bool _processing; 

    private void OnMousedown(....) // really depends on what you use, 
     // Click/doubleclick/Up/down - concept is the same 
    { 
     if (_processing) 
      return; 
     _processing = true; 
     // do something 
     . . . . . . 

     _processing = false; 
    } 
. . . . . 

你可能需要做的每個控制事件

+0

非常感謝您的回答。我嘗試了相同的代碼。最奇怪的是,它有時會丟棄單擊事件,但有些情況下會出現意外的鼠標單擊事件。 – Tuvi

+0

@Tuvi請記住,窗體也是控制,你也可以嘗試使用鎖 –

+0

首先感謝您的建議。問題是我的窗口由多個組件組成,一些控件與其他控件相關,這就是爲什麼上面的方法處理起來有點複雜。 – Tuvi

2

感謝谷歌和其他人,我用的PeekMessage()..我會發布的代碼(可能它會幫助一些之一。)

private const uint PM_REMOVE = 0x1; 
    private const uint WM_MOUSEFIRST = 0x0200; 
    private const uint WM_MOUSELAST = 0x0209; 
    private const uint WM_QUIT = 0x0012; 
    private struct Message 
    { 
     long hwnd; 
     long message; 
     long wParam; 
     long lParam; 
     long time; 
     Point pt; 
    } 
    #if WindowsCE 
    [DllImport("coredll.dll")] 
    #else 
    [DllImport("Kernel32.dll")] 
    #endif 
private extern static bool PeekMessage(out Message Msg, IntPtr hWnd, uint wMsgFilterMin, uint wMsgFilterMax, uint wRemoveMsg); 
    public void ClearMouseClickQueue() 
     { Message msg; 
    while (PeekMessage(out msg, IntPtr.Zero, WM_MOUSEFIRST,WM_MOUSELAST, 1) != false){ }} 

這是......很酷吧...

1

另一個選項來禁用觸控輸入是用一個小窗口(元素)使用TouchRegisterWindow和TouchUnregisterWindow。這可以用來禁用當前對話框中的所有點擊,而無需逐個禁用所有元素。

詳細信息在http://www.hjgode.de/wp/2012/09/24/windows-mobile-disable-touch-input/

+0

非常感謝您的建議。 – Tuvi

+0

這是一個有趣的方法。你能否告訴我,如果你在其他CE和WinMo/WEH操作系統上使用過它。文章中的評論指出它並不是全面可用的。 – tcarvin

+0

TouchRegisterWindow是Windows Mobile OS的一部分,自???? (至少Windows Mobile 2005),因此可以在任何經認證的Windows Mobile 5/6設備上使用。 – josef

相關問題