2017-04-03 16 views
1

C#.NET Compact Framework 3.5の新機能です。予期しないマウスクリックイベントが発生する.NET Compact Framework 3.5

私は熱心なユーザーからのマウスイベントがキューに入れられないようにしようとしています。これにより、意図しないクリックが発生することがあります。

.NET Compact Frameworkプラットフォームでキューに入れられたマウスメッセージを無視する最も良い方法は何ですか?悲しいことに、コードはUIスレッドで実行する必要があります。

私は試しました: 1.ウィンドウとApplication.DoEvents()を無効にします。 Enabledウィンドウ - >それは動作しませんでした。 2.私はPeekMessage()について多くのことを読んでいますが、理解できませんでした。

私は学ぶことができるリソースをお勧めします。

ありがとうございました。

答えて

1

あなたは

+0

ありがとうございました。私は同じコードを試した。最も奇妙なことは、クリックイベントを破棄することがありますが、予期せぬマウスクリックイベントが発生することがあります。 – Tuvi

+0

@Tuviフォームはコントロールでもあり、ロックを使ってみることもできます。 –

+0

まずはアドバイスをいただき、ありがとうございます。問題は私のウィンドウがコンポーネントの数で構成されていて、いくつかのコントロールは互いに関連しているので、上記のメソッドは少し複雑で扱いが難しいのです。 – Tuvi

2

は、Googleや他の人に感謝し、各制御イベントでそれを行う必要があり、この

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; 
    } 
. . . . . 

のようなもの、私は(の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を使用することです。これは、すべての要素を1つずつ無効にすることなく、現在のダイアログ内のすべてのクリックを無効にするために使用できます。

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

+0

あなたのお勧めをありがとうございました。 – Tuvi

+0

これは興味深いアプローチでした。他のCEおよびWinMo/WEHオペレーティングシステムでこれを使用したかどうか教えてください。この記事のコメントは、全面的に利用できないと述べています。 – tcarvin

+0

TouchRegisterWindowはWindowsモバイルOSの一部です。 (少なくともWindows Mobile 2005)、認証されたWindows Mobile 5/6デバイスでも使用できます。 – josef

関連する問題