在UserControl中的Panel中输入未触发的事件

时间:2012-04-30 16:06:15

标签: c# winforms events user-controls

我在UserControl i设计时添加了一个Panel。

然后,我将此控件添加到表单中。

我希望在控件具有焦点时显示焦点虚线边框。

不幸的是,面板中的Enter事件永远不会触发。当我点击用户控件本身时,我才会生火。

扩展这个问题。如何将事件从用户控件内的控件转发到基本用户控件? Hans Passant在this问题中发表的评论称,默认情况下事件会转发给他们的直接父母。我没有改变任何控件的属性。我究竟做错了什么?我是否需要在每个控件上更改一个明显的属性,以强制它转发未处理的事件?

我正在使用DevExpress控件,但这种行为在Windows WinForms控件中是相同的。

编辑:我了解该小组可能无法获得焦点。如果是这样,我如何将每个鼠标事件转发到父控件?

2 个答案:

答案 0 :(得分:2)

根据您的评论,从UserControl内部处理面板的MouseDown事件并将焦点设置为父控件:

public UserControl1() {
  InitializeComponent();
  panel1.MouseDown += new MouseEventHandler(panel1_MouseDown);
}

void panel1_MouseDown(object sender, MouseEventArgs e) {
  if (!this.Focused)
    this.Focus();
}

答案 1 :(得分:0)

在面板的MouseClick事件上使用panel1.Select(),您将能够触发panel1.Enter和panel1.Leave