2

我在设计时在 UserControl 中添加了一个面板。

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

当控件具有焦点时,我想显示焦点虚线边框。

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

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

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

编辑:我知道该面板可能无法获得焦点。如果这是真的,我如何将每个鼠标事件转发到父控件?

4

2 回答 2

2

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

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

void panel1_MouseDown(object sender, MouseEventArgs e) {
  if (!this.Focused)
    this.Focus();
}
于 2012-04-30T16:40:29.020 回答
0

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

于 2015-10-13T22:37:10.747 回答