我有一个自定义容器控件(派生自FlowLayoutPanel
),其中包含由用户拖动的零个或多个子控件。单击子控件时,将“选中”。 (它用彩色边框绘制,可以选择改变其属性。)
我想处理Delete
键,以便,如果用户当前正在容器控件中工作(例如在控件中或在子控件上单击)当前选择的控件(如果有)一)被删除。
我已经使用子项上的右键单击上下文菜单来执行删除功能。我的问题是处理Delete
密钥。我无法弄清楚如何在我的容器控件中引发KeyDown事件。我知道它与焦点有关,因此必须调用Control.Select()
(或其等价物),但最好的方法是什么?这个焦点逻辑在哪里?或者有更好的方法吗?
我不想处理表单中的KeyDown
事件,然后嗅出焦点所在的位置。这是一个可重复使用的容器控件,我希望逻辑驻留在那里。
要在自定义控件上触发KeyDown
事件,我该怎么做?
public class MyContainer : FlowLayoutPanel
{
protected override void OnKeyDown(KeyEventArgs e)
{
if (e.KeyCode == Keys.Delete)
{
MessageBox.Show("How do I get here?");
e.Handled = true;
}
base.OnKeyDown(e);
}
}
答案 0 :(得分:2)
对于MSDN上的FlowLayoutPanel控件,KeyDown事件被列为无意义的事件。建议PreviewKeyDown事件作为替代。
答案 1 :(得分:1)
拖入容器的物品是否可能正在接收事件?
也许在物品进入容器后,您需要手动将焦点设置到容器中。