在C#中,为什么要调用父Form的helpRequested()事件而不是子窗体?

时间:2014-09-23 06:36:09

标签: c#

情境: - 我有一个ParentForm,其中HelpRequest事件已订阅。 -On ParentForm按钮单击ChildForm打开。 -HelpRequest事件未订阅childForm。

实际结果 - 但是当我在我的childForm中时,我按下'F1'的HelpFquest会触发ParentForm事件。

预期结果 - 我希望什么都不会发生。

为什么会发生这种情况......?

1 个答案:

答案 0 :(得分:0)

这是一种事件冒泡的形式,但我无法在任何地方清楚地看到它。

但是,如果你看一下Control.OnHelpRequested的实现,那就非常明显了:

HelpEventHandler handler = (HelpEventHandler)Events[EventHelpRequested];
if (handler != null) {
    handler(this,hevent);
    // VSWhidbey 95281: Set this to true so that multiple events aren't raised...
    hevent.Handled = true;
}

if (!hevent.Handled) {
    if (ParentInternal != null) {
        ParentInternal.OnHelpRequested(hevent);
    }
}

也就是说,如果您没有在特定控件中定义处理程序,那么它会明确地传递给父控件。

这很有道理 - 很多事情都是Control,你不一定要为每个人分别提供帮助 - 所以如果你的父母表格有子表单,您只编写了一个涵盖父级和子级所有用法的帮助页面,只需在父表单中安装帮助处理程序。

相反,如果您的帮助页面只涉及OK按钮的工作方式,那么您需要在OK按钮{{1}中添加帮助处理程序}}

如果你想压制这个事件冒泡到父母,请确保你已经安装了一个没有做任何事情的HelpRequested处理程序