2

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

2 回答 2

2

KeyDown 事件在 MSDN 上被列为对 FlowLayoutPanel 控件没有意义。建议将PreviewKeyDown事件作为替代。

于 2010-01-04T20:23:03.613 回答
1

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

也许在一个项目被药物放入你的容器之后,你需要手动将焦点设置到容器上。

于 2010-01-04T20:16:25.123 回答