2011-12-19 3 views
6

どのようにすべてのクリックがイベントを通過するのですか?あなたがクリックしすぎると、ダブルクリックしていると思ってクリックをイベントハンドラに送信しないと気付きました。すべてのクリックを得る方法はありますか?WinFormsはダブルクリックを無効にし、すべてのマウスクリックを受け入れますか?

+2

代わりにmousedownイベントを使用してください。 –

+0

@RussellTroywest私は[MouseClick](http://msdn.microsoft.com/en-us/library/system.windows.forms.control.mouseclick%28VS.80%29.aspx)イベントが良いと思います。注文を上げるために。 –

+1

@Michael:MSDNによると、「ユーザーのオペレーティングシステムのマウス設定によって決定される、2回のシングルクリックは、2回目のMouseClickイベントではなく、MouseDoubleClickイベントを生成します。 - ハイが何を見ているのか。 –

答えて

9

なぜこの質問に賞金が得られたのか分かりませんが、受け入れられる答えはすでに解決策に近いはずです。 MouseDownの代わりにMouseUpを使用する必要があることを除いて、ユーザーは通常、ボタンを離したときにクリックアクションが有効になることを期待しています。バックアウト "oopsを提供する、それをクリックすることを意味しなかった、それは無視されるようにマウスを移動する"オプション。

ただし、PictureBoxのような組み込みのWinformsコントロールの場合、これはControl.SetStyle()メソッドで構成できます。プロジェクトに新しいクラスを追加し、以下に示すコードを貼り付けます。コンパイル。ツールボックスの上から新しいコントロールをドロップ:

using System; 
using System.Windows.Forms; 

class MyPictureBox : PictureBox { 
    public MyPictureBox() { 
     this.SetStyle(ControlStyles.StandardDoubleClick, false); 
    } 
} 

が、これは既存のネイティブWindowsコントロールをラップする.NETクラスのために動作しないことが用心ください。 TextBox、ListBox、TreeViewなどと同様です。そのための基本的な設定は、WNDCLASSEX.style member、CS_DBLCLKSスタイルフラグです。そのスタイルフラグを設定するコードはWindowsに焼き付けられ、変更することはできません。ダブルクリックをワンクリックに戻すには、別の種類の手術が必要です。あなたは私がテキストボックスのための一例をあげる、WndProcメソッド()メソッドをオーバーライドして行うことができます。

using System; 
using System.Windows.Forms; 

class MyTextBox : TextBox { 
    protected override void WndProc(ref Message m) { 
     // Change WM_LBUTTONDBLCLK to WM_LBUTTONCLICK 
     if (m.Msg == 0x203) m.Msg = 0x201; 
     base.WndProc(ref m); 
    } 
} 

あなたが他のコントロールのためにそれをしたい場合だけ、クラス名を変更します。あなたが決して多くのコードを必要としないようにWinformsを習得するには、ちょうどPetzold :)

-2

あなたはすべてのクリックを数えたいと思います。 クリック数をカウントしたい場合は、カウンタ変数を1つ設定し、クリックイベントでそれを増やします。 このヘルプがあります....

+0

あなたはそれを本当に速く10回クリックしてください。あなたは10未満の数字を取得します。私はそれらのクリックのすべてを10欲しい。 – Will

2

Clickイベントの代わりにcontrols MouseDownイベントを使用します。 MouseDownは、そのコントロール上でマウスが「押し込まれる」たびに呼び出されます。クリックがダブルクリックであるとシステムが判断した場合、クリックされないことがあります。代わりにDoubleClickイベントが発生します。

関連する問題