當打開ContextMenuStrip
時,如果用戶鍵入可能選擇的第一個字母 - 就好像他點擊了它。我想攔截並獲取他點擊的角色。獲取用戶鍵入的字符,當ContextMenuStrip有焦點時
以下代碼可以做到這一點,但可以對可能的字符進行硬編碼。我想要一個通用的方法來做到這一點,要麼通過關鍵筆劃禁用自動選擇(只留下鼠標點擊)或某種方式來攔截字符。
下面的簡化代碼假設我想讓winform的Text
爲鍵入的字符,並且ContextMenuStrip
有一個選項是「A」。
public Form1()
{
InitializeComponent();
contextMenuStrip1.KeyDown += contextMenuStrip1_KeyDown;
}
private void button1_Click(object sender, EventArgs e)
{
contextMenuStrip1.Show();
}
void contextMenuStrip1_KeyDown(object sender, KeyEventArgs e)
{
e.SuppressKeyPress = true;
if (e.KeyCode == Keys.A)
{
if (e.Shift) Text = "A";
else Text = "a";
}
}
使用KeyPress
事件和檢查e.KeyChar
不起作用,因爲它不會被解僱。 (以下簡稱「」點擊事件被解僱,而不是)。
使用其中之一:e.KeyCode
,e.KeyData
,或e.KeyValue
不工作(沒有進一步的硬編碼),因爲他們接受一個Shift
作爲重點。
你只想攔截A-Z嗎?你想要在該範圍之外發現什麼? – thudbutt
您應該從ContextMenuStrip派生自己的類並重寫ProcessMnemonic()方法。 –
@HansPassant謝謝。您可以將您的評論轉換爲答案。這是答案。 – ispiro