2011-11-17 49 views
3

可能重複:
Click lost on focusing form如何激活/關注表單時在C#MenuStrip上點擊鼠標?

如果有MenuStrip形式不具有焦點,你點擊MenuStrip的窗口,它使用的是第一次點擊激活窗口,然後再次點擊MenuStrip以使菜單下拉。按鈕的工作方式不同。如果一個帶有按鈕的表單沒有被激活/沒有焦點,並且您單擊了該按鈕,則該按鈕將作爲單擊該按鈕的按鈕進行註冊,並同時使該表單處於活動狀態/對焦狀態。即使表單未處於活動狀態,我確實需要MenuStrip上的該菜單才能在首次點擊時下拉菜單。

我嘗試使用OnMouseClick(...)方法來觸發模擬鼠標點擊,當表單Enter和/或激活事件觸發但不起作用。 「輸入」和「激活」事件在鼠標向下時觸發,所以通過在Enter或Activate事件處理程序中放置一個OnMouseClick(...)調用,它將嘗試在釋放第一次鼠標單擊之前觸發第二次鼠標點擊。

我以某種方式需要OnMouseClick(...)發生激活事件發生後,然後MouseUp發生。

回答

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(); 
    } 

} 
相關問題