[英]UserControl KeyDown Event Not Fire Against Revoke Of Windows Application KeyDown Event
我有UserControl並面臨KeyDown事件的問題。 我的UserControls將顯示禁止撤銷Windows窗體的keydown事件,如下所示:
用戶控件的事件:
private void UserControl_KeyDown(object sender,KeyEventArgs e)
{
if ((Keys)e.KeyCode == Keys.Escape)
{
this.Visible = false;
}
}
上面的事件將不得不隱藏UserControl,但由於Windows窗體keydown的撤消,該事件不會觸發,如下所示:
Windows表單:
private void button1_Click(object sender, EventArgs e)
{
panel1.SendToBack();
panel2.SendToBack();
panel3.SendToBack();
panel4.SendToBack();
am.Focus();
this.KeyDown -= new KeyEventHandler(Form1_KeyDown);
}
當用戶控件添加到Windows窗體時,這將顯示用戶控件,如下所示:
private UserControl.UserControl am = new UserControl.UserControl();
public Form1()
{
InitializeComponent();
this.Controls.Add(am);
}
我想針對用戶控件的可見性撤消winform的keydown事件,並觸發UserControl的keydown事件以隱藏UserControl,但效果不佳。 UserControl事件的keydown事件不會觸發。 不知道為什么嗎? 如何以正確的方式做同樣的事情?
鍵盤通知會以焦點發布到控件。 幾乎從來都不是UserControl,它不需要焦點。 即使使用Focus()方法顯式設置了焦點,它也會立即將焦點傳遞給其子控件之一。 UserControl被設計為只是其他控件的容器。
改寫ProcessCmdKey()方法。 將此代碼粘貼到控件類中:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
if (keyData == Keys.Escape) {
this.Visible = false;
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
請注意,使用Escape鍵不是最好的主意,放置在用戶控件上的Form很有可能需要該鍵。 就像一個對話框。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.