2011-11-17 7 views
3

가능한 중복은 :
Click lost on focusing form폼이 활성화/포커스 될 때 C# MenuStrip에서 마우스를 클릭하면 어떻게 발생합니까?

MenuStrip있는 폼에 포커스하고 MenuStrip 클릭이 윈도우가 아닌 경우는 첫 번째 클릭 창을 활성화하는 것을 사용 메뉴를 가져 오려면 MenuStrip을 다시 클릭해야합니다. 버튼은 다르게 작동합니다. 버튼이있는 양식이 활성화되어 있지 않거나 초점이없고 버튼을 클릭하면 해당 양식을 활성/초점화할뿐만 아니라 해당 첫 번째 클릭을 버튼으로 클릭하여 등록합니다. 폼이 활성화되지 않은 경우에도 해당 첫 번째 클릭을 드롭 다운하려면 MenuStrip의 메뉴가 필요합니다.

양식 입력 및/또는 활성화 이벤트가 트리거되었지만 작동하지 않을 때 시뮬레이션 된 마우스 클릭을 발생 시키려고 시도했습니다. Enter 및 Activate 이벤트는 Mouse Down에서 트리거되므로 OnMouseClick(...) 호출을 Enter 또는 Activate 이벤트 핸들러에 넣으면 첫 번째 마우스 클릭이 해제되기 전에 두 번째 마우스 클릭을 시작하려고합니다.

Activate 이벤트가 발생하고 MouseUp 이후에 아무 래도 OnMouseClick(...)이 발생해야합니다.

답변

2

를 사용하여 교체 등이 MenuStrip 유도체 :

public class ActivatingMenuStrip : MenuStrip 
{ 
    public ActivatingMenuStrip() 
    { 
     InitializeComponent(); 
    } 


    int WM_MOUSEACTIVATE = 0x21; 
    protected override void WndProc(ref Message m) 
    { 
     if (m.Msg == WM_MOUSEACTIVATE) 
     { 
      this.Parent.Focus(); 
     } 
     base.WndProc(ref m); 
    } 

    private System.ComponentModel.IContainer components = null; 

    protected override void Dispose(bool disposing) 
    { 
     if (disposing && (components != null)) 
     { 
      components.Dispose(); 
     } 
     base.Dispose(disposing); 
    } 

    private void InitializeComponent() 
    { 
     components = new System.ComponentModel.Container(); 
    } 

}