2013-01-09 89 views
0

是否有無論如何檢查菜單項事件是來自菜單中的點擊還是來自按下的快捷鍵?檢查一個菜單項事件是否來自點擊或快捷方式

我已經嘗試添加事件處理程序的按鍵和按鍵事件,但是這些事件不會被「解僱」,當它是一個快捷鍵被按下(他們按預期工作,當它不是一個快捷鍵) 。我無法在發送者對象中找到任何與菜單單擊或快捷方式單擊不同的內容。

+1

只是出於好奇,有什麼點差異點擊快捷鍵? – ken2k

+1

請問爲什麼你需要這樣的功能?通常我會說,鼠標點擊或按鍵不應有任何區別,它是菜單項的一個任務,從中抽象出來。 – Desty

+0

一臺電腦出現問題,它看起來隨機地打開了與F3鍵綁定的應用程序中的表單。我的懷疑是計算機的鍵盤正在發送密鑰。但是,由於有很多方法可以打開表單(菜單點擊,快捷方式,「最近打開」表單的下拉菜單,或者只是關閉頂部表單並返回到頂部表單),問題從未發生過我在身邊我無法驗證問題。所以我想在F3鍵被按下時記錄下來,看看問題出現時是否匹配。 – GraeningM

回答

1

您可以通過覆蓋ProcessCmdKey捕獲所有的按鍵組合:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{ 
    if (keyData == (Keys.Control | Keys.F)) 
    { 
     Console.WriteLine("My code ran from shortcut"); 
     myFunction(); 
    } 
    return base.ProcessCmdKey(ref msg, keyData); 
} 

private void ToolStripMenuItem_click(object sender ...) 
{ 
    Console.WriteLine("My code ran from menu item"); 
    myFunction(); 
} 

void myFunction() 
{ 
    //your functionality here 
} 
+0

謝謝,ProcessCmdKey是我想要的。要注意的是,如果它是菜單單擊或Shotcut鍵,則ToolStripMenuItem_Click事件將被引發。 – GraeningM

1

那麼要獲得幫助,你應該發佈你已經嘗試過的。 (你的源)

您可以使用一個枚舉此:

enum Sender 
{ 
    Shortcut, 
    Menu 
} 

void MenuEvent(Sender sender) 
{ 
    if (sender == Sender.Shortcut) 
    { 

    } 
    else 
    { 

    } 
} 

//if you click from the menu 
void btnMenuClick() 
{ 
    MenuEvent(Sender.Menu); 
} 

//if you use shortcut 
void OnShortcutEvent() 
{ 
    MenuEvent(Sender.Shortcut); 
} 

編輯:我想我的答案是模糊的,所以我編輯的代碼。我希望它現在更清楚,但我必須說OP應該提供更多細節,例如張貼一些代碼。

+2

要說你的真實,我不明白你的解決方案 – platon

+0

@platon對不起,我希望現在清楚,讓我知道!但是OP也可以更清楚一些。 – joell

+0

我不確定你想要哪個代碼,我用什麼來創建菜單?我可以添加它,但它比需要複雜得多,因爲它是基於保存在數據庫中的信息創建菜單,因此我們可以控制誰獲取了哪些菜單項。核心是相當簡單的,只是一個簡短的菜單項和點擊菜單項上的事件 – GraeningM

0

我看到這個問題的單一解決方案 - 覆蓋處理快捷方式時引發的ToolStripMenuItem的ProcessCmdKey方法。在這種情況下,您可以確定點擊是由快捷方式引起的。顯然,你需要使用你自己的ToolstripMenuItem類而不是標準的類。

0

處理MouseDown事件處理您的鼠標點擊。

menuItem.MouseDown + = new MouseEventHandler(Process_Mouse_Click_Handler);

處理Click事件以處理您的快捷方式。

menuItem.Click + = new EventHandler(Process_Shortcut_Handler);

+0

如果你走這條路(我不主張你這樣做),那麼你應該處理鼠標事件。 – BitsEvolved

相關問題