情境: - 我有一个ParentForm,其中HelpRequest事件已订阅。 -On ParentForm按钮单击ChildForm打开。 -HelpRequest事件未订阅childForm。
实际结果 - 但是当我在我的childForm中时,我按下'F1'的HelpFquest会触发ParentForm事件。
预期结果 - 我希望什么都不会发生。
为什么会发生这种情况......?
答案 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
处理程序