2016-08-17 12 views
1

Windowsフォームアプリケーションを作成しましたが、コントロールのキャプチャプロパティから異常な動作が発生します。空白のフォームでControl.Captureは常にtrueですか?

、「LABEL1」と呼ばれる単一のラベルおよびコード

public Form1() 
{ 
    InitializeComponent(); 

    label1.MouseDown += pictureBox1_MouseDown; 
} 

void pictureBox1_MouseDown(object sender, MouseEventArgs e) 
{ 
    Debug.WriteLine(label1.Capture); 
    label1.Capture = !label1.Capture; 
    Debug.WriteLine(label1.Capture); 
} 

で私が最初にWriteLineメソッドは、常にときに、第2の1は常に「偽」と言い、「真の」と言うことを、観察ボタンをクリックします。複数回クリックした場合でも

代わりにlabel1.Capture = trueを使用しても、ラベルはその国境の外にあるクリックには反応しません。

「キャプチャ」プロパティの予想される動作を誤解していますか?私は初期値がfalseであることを期待していました。ラベルは最初のクリック後、外に出るクリックに反応しないようにしました。そして、ラベルはすべてのマウスクリックに反応します。

+0

2つのコントロールで同じイベントハンドラを使用すると混乱することがあります。ラベルをクリックすると、確かにTrueになります。そして確かに、偽、ピクチャボックスをクリックします。 Winformsは、キャプチャプロパティを使用して確実にClickイベントを生成し、MouseDownイベントを発生させる前にオンにします。コントロールの境界の外側にドラッグした後にマウスを離したときにClickイベントが*発生しない*ようにする必要があります。自分自身でキャプチャプロパティを使用すると(「外部のクリックに反応する」のように)動作しない可能性があります。 –

答えて

1

MouseDownイベントでは、コントロールのCaptureは常に最初にtrueに設定されています。だから通常MouseDownを実行し、マウスボタンを離さずにマウスをコントロールから離してマウスボタンを離すと、コントロールのMouseUpイベントが発生します。

あなたはMouseDownfalseCaptureを設定した場合、あなたのコントロールのマウスアップイベントのみ発生します、あなたのマウスがコントロール上にある場合、あなたはあなたのコントロールの外にマウスを移動し、マウスボタンを離した場合、MouseUpイベントあなたのコントロールのは上がらないでしょう。

MouseUpでもキャプチャは自動的に解除されます。詳細については

これらのリソースを見てみましょう:

+0

ありがとうございます。私はこれが異なる方法で処理されるWPFから来ています。 – Jens

関連する問題