2013-11-29 2 views
2

MouseClick 이벤트가있는 Form에 Panel이 있습니다. 문제는 MouseClick 이벤트가 패널을 클릭 할 때마다 발생하지 않는다는 것입니다. 클릭을 건너 뛰면 매우 무작위입니다.Panel에서의 MouseClick은 클릭을 건너 뜁니다.

은 내가 대신 MouseDown 및 이는 MouseUp 이벤트를 사용할 수 있습니다 생각하지만 (나는 "클릭"을 사용하면 이벤트 저도 같은 문제가) 내가

나는했습니다 ... 이런 일이 이유를 알고 싶습니다 아주 간단한 테스트 프로젝트 내 프로젝트 외부에서이 테스트를하고 아직도하고있어 :

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 

     var panel = new Panel 
     { 
      Location = new Point(10, 10), 
      Size = new Size(200, 200), 
      BackColor = Color.Red 
     }; 
     panel.MouseClick += panel_MouseClick; 
     //panel.Click += panel_Click; --Also skips clicks. 

     this.Controls.Add(panel); 
    } 

    void panel_MouseClick(object sender, MouseEventArgs e) 
    { 
     Console.WriteLine("Click"); 
    } 
} 

답변

3

패널 클래스는 ControlStyles.StandardDoubleClick이 켜져있다. 따라서 MouseDoubleClick 이벤트를 생성 할 가능성이 높습니다. 이벤트를 구독하지 않았으므로 표시되지 않습니다.

스타일 플래그를 끄고 해당 이벤트를 구독하는 것 외에도 MouseDown 이벤트는 예를 들어 대안입니다. 스타일을 끄려면 SetStyle()을 호출하는 생성자만으로 Panel에서 클래스를 파생시켜야합니다.

+0

대단히 감사합니다! Panel에서 클래스를 파생시키는 옵션을 찾아서 생성자에서 SetStyle (ControlStyles.StandardDoubleClick, false)을 호출했습니다. – VincentC