2016-05-26 18 views
-1

は私のフォームのマウスイベントハンドラの1つの例である:マウスイベントがトリガーされないのはなぜですか?ここ

private void GENIO_Viewer_Form_MouseDown(object sender, MouseEventArgs e) 
{ 
    if(e.Button == MouseButtons.Left) 
    { 
     m_bLeftButton = true; 
     m_MousePosition = e.Location; 
     m_MouseClick = e.Location; 

     if(m_bZoomWindow) 
     { 
      m_Points.Clear(); 
      m_Points.Add(GetWorldCoordinates(e.Location)); 
     } 
    } 

    base.OnMouseDown(e); 
} 

私はそれにブレークポイントを置いて、それがトリガーれることは決してありません。フォーム定義などで何かを逃したことはありますか?

更新:

フォームが拡大TableLayerPanelを持っているので、私は、追加のイベントハンドラ追加しました:

private void tableLayoutPanel_MouseDown(object sender, MouseEventArgs e) 
{ 
    MessageBox.Show("Yes"); 
} 

をしかし、たとえこれが傍受されません。 tableLayoutPanelは、(UserControlから派生した)UserControl1オブジェクトを表示しています。

問題は、(UserControlに)適切なハンドラを追加しても、私はその処理を行う必要があるので、フォーム自体にそのバックをフィードする必要があるということです。

更新:これは私のフォームのイベントハンドラのリストの一部です:

enter image description here

+5

途中でコントロールがある場合、フォームはマウスイベントを取得しません。つまり、実際にクリックされたものがマウスイベントを受け取ります。それがコントロールの場合、コントロールはマウスイベントを取得します。あなたがそれらを処理すべき場所はどこですか。 –

+2

質問に答えを入れてはいけません。問題を解決した場合は、以下の自己回答を投稿することができます。 – LarsTech

+1

@LarsTech(最終的に)私はこのPreviewMouseDownを試しています。 –

答えて

1

私はPreviewMouseDownイベントが仕事を得るように見えることはできません。コードを手動で編集しようとしましたが、コンパイルできませんでした。

誰かのコメントに基づいて、私は右のコントロール、つまりフォーカスのあるコントロールでメッセージを傍受しなければならないという事実を確立しました。これは、UserControlから派生したオブジェクトです。

にイベントハンドラを追加しなければならなかったので、クラスです。例:

protected override void OnMouseDown(MouseEventArgs e) 
{ 
    if (e.Button == MouseButtons.Left) 
    { 
     m_bLeftButton = true; 
     m_MousePosition = e.Location; 
     m_MouseClick = e.Location; 

     if (m_bZoomWindow) 
     { 
      m_Points.Clear(); 
      m_Points.Add(GetWorldCoordinates(e.Location)); 
     } 
    } 

    base.OnMouseDown(e); 
} 
+0

なぜ 'PreviewMouseDown'がうまくいかなかったのですか? –

+0

@FirstStep私はそれを見つけることができませんでした。私は手動でそれを入力しようとした。squiggles得た。働いていたのはPreviewKeyDownだけでした。 –

+0

あなたは 'PreviewKeyDown'のほかに何を持っていますか?イベントハンドラページの画面を印刷できますか?私のように私は今好奇心を持っています –

関連する問題