如何在自定义容器控件中触发KeyDown事件?

时间:2010-01-04 20:06:56

标签: winforms keydown

我有一个自定义容器控件(派生自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);
    }
}

2 个答案:

答案 0 :(得分:2)

对于MSDN上的FlowLayoutPanel控件,KeyDown事件被列为无意义的事件。建议PreviewKeyDown事件作为替代。

答案 1 :(得分:1)

拖入容器的物品是否可能正在接收事件?

也许在物品进入容器后,您需要手动将焦点设置到容器中。