我有一個帶有 MenuStrip 的表單,我想在其中對“CTRL P”擊鍵做出反應。
問題是,如果打開 MenuStrip,我的表單不會得到“CTRL P”。
我嘗試設定 Form 的 KeyPreview = true,并在沒有成功的情況下覆寫 ProcessCmdKey ...
有我的 ProcessCmdKey 覆寫:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == (Keys.Control | Keys.P))
{
MessageBox.Show("ProcessCmdKey Control P");
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
uj5u.com熱心網友回復:
該訊息不會通過表單的關鍵事件,它將由每個下拉選單處理。
您可以使用評論中提到的方法,或者作為另一種選擇,您可以實作IMessageFilter以在WM_KEYDOWN調度到下拉串列之前捕獲它:
public partial class Form1 : Form, IMessageFilter
{
const int WM_KEYDOWN = 0x100;
public bool PreFilterMessage(ref Message m)
{
if (ActiveForm != this)
return false;
if (m.Msg == WM_KEYDOWN &&
(Keys)m.WParam == Keys.P && ModifierKeys == Keys.Control)
{
MessageBox.Show("Ctrl P pressed");
return true;
}
return false;
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
Application.AddMessageFilter(this);
}
protected override void OnClosing(CancelEventArgs e)
{
base.OnClosing(e);
Application.RemoveMessageFilter(this);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/440022.html
