![](/img/trans.png)
[英]How to create event of Keydown if all the controls are disabled in winforms?
[英]How to handle Keydown event in Form level after All Child controls handled it?
我有一個帶有兩個控件 A 和 B 的表單,A 有一個按鍵按下事件,當在 A 控件上按下“S”時我會顯示一個消息框。 我想在任何其他控件中按下“S”時顯示另一條消息。
我怎樣才能做到這一點 ?
我想要的是:我應該能夠在所有子控件之后處理 Key-down 事件。 並且我應該能夠知道該事件是否在 Form-level Key-down 的子控件中處理。
我嘗試啟用鍵預覽,但是當啟用鍵預覽時,表單級事件會在子控件事件之前觸發。 我首先想要子控件,然后形成一級
我希望在觸發焦點控件的按下鍵事件后觸發表單級事件。 並且我想檢查表單級事件是否在焦點控件按鍵事件中處理該事件。
我可以使用哪些方法?
請賜教。
您可以執行以下操作
這里是一個示例代碼
//表單1代碼
namespace EventSample
{
public delegate void AfterChildEventHandler(Control control,Keys key);
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
aControl1.OnChildFireEvent += OnChildFireEvent;
bControl1.OnChildFireEvent += OnChildFireEvent;
}
void OnChildFireEvent(Control control, Keys key)
{
MessageBox.Show("Form fired event from " + control.GetType().Name);
}
}
}
//A控制代碼
namespace EventSample
{
public partial class AControl : UserControl
{
public event AfterChildEventHandler OnChildFireEvent;
public AControl()
{
InitializeComponent();
}
private void AControl_KeyDown(object sender, KeyEventArgs e)
{
MessageBox.Show("A Control fired Key down");
if (OnChildFireEvent != null)
OnChildFireEvent(this, e.KeyCode);
}
}
}
//B控制代碼
public partial class BControl : UserControl
{
public event AfterChildEventHandler OnChildFireEvent;
public BControl()
{
InitializeComponent();
}
private void BControl_KeyDown(object sender, KeyEventArgs e)
{
MessageBox.Show("B Control fired Key down");
if (OnChildFireEvent != null)
OnChildFireEvent(this, e.KeyCode);
}
}
已編輯
另一個解決方案,你可以用更少的代碼來實現
讓每個控件調用這個事件
命名空間 EventSample {
public delegate void AfterChildEventHandler(Control control, Keys key); public class GlobalEvent { public static event AfterChildEventHandler OnChildEventFire; public static void Invoke(Control control, Keys key) { if (OnChildEventFire != null) OnChildEventFire(control, key); } }
}
A 控件的變化
namespace EventSample
{
public partial class AControl : UserControl
{
public AControl()
{
InitializeComponent();
}
private void AControl_KeyDown(object sender, KeyEventArgs e)
{
MessageBox.Show("A Control fired Key down");
GlobalEvent.Invoke(this, e.KeyCode);
}
}
}
B 控制的變化
namespace EventSample
{
public partial class BControl : UserControl
{
public BControl()
{
InitializeComponent();
}
private void BControl_KeyDown(object sender, KeyEventArgs e)
{
MessageBox.Show("B Control fired Key down");
GlobalEvent.Invoke(this, e.KeyCode);
}
}
}
構建示例並運行並嘗試按 A 或 B 上的任意鍵,然后您會發現 A 將觸發然后表單
希望它會幫助你
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.