我的C#应用程序中有一个“帮助”菜单,其中包含“过滤”项。此项显示默认的MessageBox及其说明,按钮为OK,帮助在MSDN中打开链接。
string link = "http:...";
MessageBox.Show("explanation...", "Filtering", MessageBoxButtons.OK,
MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, 0, link);
通过项目打开信息并通过“帮助”按钮打开链接可以正常工作。
问题:
我添加了一个“过滤”快捷键(F1)。现在,当我在应用程序中按F1时,它不仅会打开消息框和链接,而是打开链接2或3次。
行为是这样的:
问题在于使用F1,因为它也是框中“帮助”按钮的关键,但它仍然无法解释为什么关键事件也会在刚打开的框中发生,以及为什么链接打开2或3倍。我检查了什么:
有人能想出解决这个问题的方法吗?即使链接仅打开了一次,我也没有问题。
答案 0 :(得分:1)
试试这个:
private bool isClicked = false, secondTime = false;
private void FilteringToolStripMenuItem_Click(object sender, EventArgs e)
{
isClicked = true;
string link = "http:...";
MessageBox.Show("explanation...", "Filtering", MessageBoxButtons.OK,
MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, 0, link);
isClicked = false;
}
private void ShowMsgBox()
{
secondTime = true;
string link = "http:...";
MessageBox.Show("explanation...", "Filtering", MessageBoxButtons.OK,
MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, 0, link);
secondTime = false;
}
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x53) //WM_HELP message
{
if (isClicked == false)
{
if (secondTime == false)
{
ShowMsgBox();
}
}
}
base.WndProc(ref m);
}
删除该行:
this.FilteringToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F1;
当您按下F1
键时,会调用 FilteringToolStripMenuItem_Click ,打开链接,然后生成WM_HELP
消息并打开另一个链接。使用上面的代码,我们检查在打开否消息框时是否生成WM_HELP
消息(secondTime = false和isClicked = false),以及通过打开消息框时ToolStripMenuItem (isClicked = true)