当我显示MessageBox
helpFilePath
设置为某个网址时,网址会多次加载。在我看来,网址加载的次数等于我父母的表格加一次。
任何人都可以解释为什么会这样吗?
根据MSDN,HelpRequested
事件将在活动表单上触发:
当用户单击“帮助”按钮时,将指定帮助文件
helpFilePath
参数已打开。拥有消息框的表单 (或活动表格)也会收到HelpRequested事件。helpFilePath参数的格式可以是 C:\ path \ sample.chm 或 /folder/file.htm 。
但我不明白为什么在父表单上提升HelpRequested
事件应加载来自子表单MessageBox
的链接。
我做了一些我不应该做的事情吗?
此代码将重现该行为:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// First button spawns new instances of the form
var button1 = new Button { Text = "New Form" };
Controls.Add(button1);
button1.Click += delegate
{
using (var form = new Form1())
form.ShowDialog();
};
// Second button shows the MessageBox with the help-button
var button2 = new Button { Text = "Dialog", Left = button1.Right };
Controls.Add(button2);
button2.Click += delegate
{
MessageBox.Show(
"Press Help",
"Caption",
MessageBoxButtons.OK,
MessageBoxIcon.None,
MessageBoxDefaultButton.Button1,
0, // Default MessageBoxOption (probably not related to the behaviour)
"http://SomeHelpSite.com/MyOnlineHelp.htm");
};
}
}
点击"新表格"几次:
然后点击"对话框":
现在,点击帮助按钮:
在我的计算机上打开SomeHelpSite.com树时间:
答案 0 :(得分:2)
我找到了一种方法来阻止未经考虑的行为,并可能解释为什么会发生这种情况。
要阻止在第一个之后打开未经过隔离的URL,您只需为HelpRequested事件添加一个处理程序。在这种情况下,您应通知WinForms引擎您已处理了帮助请求,无需采取进一步措施
public Form1()
{
InitializeComponent();
this.HelpRequested += onHelpRequested;
.....
}
protected void onHelpRequested(object sender, HelpEventArgs e)
{
e.Handled = true;
}
这样,只打开一个页面。
现在可能会在MSDN页面上为 helpEventArgs 的Handled property报告解释原因的原因,您可以在此处找到此声明:
如果未将此属性设置为true,则会将事件传递给 Windows进行额外处理。
编辑进一步的测试显示,在没有将Handled属性设置为true的情况下,HelpRequested事件的事件处理程序存在的简单事实会阻止未经考虑的行为