【问题标题】:Click / MouseClick events never reach my WinForms UserControlsClick / MouseClick 事件永远不会到达我的 WinForms UserControls
【发布时间】:2013-01-05 12:11:32
【问题描述】:

我有以下情况(简化):在 WinForms 表单中,我有一个 GroupBox。里面有一些 UserControl_A 对象,每个对象都包含几个 UserControl_B 对象(当然都是从 UserControl 派生的)。

我有一个用于 GroupBox 的 ContextMenuStrip,每次右键单击都可以正常工作,无论是在任何 UserControl_A/B 对象上还是在 GroupBox 背景本身上。

但我还需要处理左键单击。处理 GroupBox 的 Click 和 MouseClick 事件是有效的,但仅在背景上。只要指针位于 UserControl_A 或 UserControl_B 对象内,就不会发生任何事情。我已经尝试处理两个 UserControl 类的 Click 和 MouseClick 事件,但根本不会调用处理程序。

任何提示这里出了什么问题?或者如何调试这样的事件处理问题?

非常感谢您, 斯蒂芬

补充:我现在做了一个全新的、精简的项目来探索这种情况,一切正常。那么如何才能检测出我的实际项目出了什么问题呢?

【问题讨论】:

  • 嗨 Stefan,也许您可​​以向我们展示一些 onClick/onMouseDown 的代码...-您的 UserControls 方法。
  • 没有。我只向事件添加了 UserControl_A_Click 等代表。在委托中,目前仅打印一条调试消息。 ——你看到我的补充了吗?似乎这不是机制本身,而是我的项目内部的某些东西是错误的。我已经在代码中搜索了所有“点击”字符串……没什么可疑的。
  • 好吧,这是我自己的错。很抱歉浪费您的时间。原因很简单:在我的 UserControls 中还有其他控件,例如停靠的 TableLayoutPanel 和一些标签。 UserControl 类中的鼠标事件处理程序永远不会收到任何事件,因为它们会传播到内部控件中。在那里挂钩委托函数是可行的...... :-) 也许这可以帮助遇到类似问题的人。 问题已回答。我还不能在这里回答我自己的问题,我会尽快解决这个问题

标签: c# winforms event-handling mouseevent


【解决方案1】:

您必须将您的UserControls 作为子控件添加到GroupBox

groupBox.Controls.Add(yourUserControl); // correct way

在这种类型中,右键单击适用于您的父控件 (GroupBox) 的所有子控件。

form.Controls.Add(groupBox);
form.Controls.Add(yourUserControl); // wrong way

【讨论】:

    【解决方案2】:

    您将鼠标事件放在 UserControl_A 中(我认为它的类继承了 Control) 当鼠标(悬停,向下等......)在那个(用户控件)上时,该事件将触发 当您在(您的 GroupBox )上时,事件属于 groupBox

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多