在用户控件的面板中输入未触发的事件

本文关键字:事件 输入 用户 控件 | 更新日期: 2023-09-27 18:32:39

我在用户控件设计时中添加了一个面板。

然后,我将此控件添加到窗体中。

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

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

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

我正在使用DevExpress控件,但此行为在窗口WinForms控件中相同。

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

在用户控件的面板中输入未触发的事件

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

public UserControl1() {
  InitializeComponent();
  panel1.MouseDown += new MouseEventHandler(panel1_MouseDown);
}
void panel1_MouseDown(object sender, MouseEventArgs e) {
  if (!this.Focused)
    this.Focus();
}

使用 panel1。在面板的鼠标单击事件上选择((,您将能够触发面板1。输入和面板 1。离开