【问题标题】:Enter event not firing in Panel inside a UserControl输入事件未在用户控件内的面板中触发
【发布时间】:2012-04-30 16:06:15
【问题描述】:

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

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

我想在控件获得焦点时显示焦点虚线边框。

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

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

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

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

【问题讨论】:

  • 您不应该只使用 UserControl 的 EnterLeave 事件来使其内部的面板无效吗?
  • 如果我单击面板,UserControl 的 Enter 事件不会触发。那是我的问题
  • Panel not getting focus的可能重复

标签: c# winforms events user-controls


【解决方案1】:

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

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

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

【讨论】:

  • 现在,当控件通过其他方式(例如通过使用 Tab 键)获得焦点时呢?
  • @dynamichael UserControl 有一个标准的 Enter 事件。除非那个 UserControl 有一个像 TextBox 这样的可聚焦控件。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多