奇怪的ToolStripButton单击以打开OpenFileDialog行为

时间:2012-03-30 10:06:34

标签: c# winforms openfiledialog toolstripbutton

我发现了一个奇怪的ToolStripButton双击问题。这些步骤将重现问题:

  1. 创建Windows窗体应用程序。
  2. 在主表单上添加ToolStrip
  3. ToolStripButton上添加ToolStrip
  4. 在主表单上添加OpenFileDialog
  5. 双击属性工具箱中的ToolStripButton的{​​{1}}事件。
  6. Click方法中添加:

    toolStripButton1_Click
  7. 开始调试。
  8. 快速双击openFileDialog1.ShowDialog();
  9. 这就是问题所在。首先,弹出一个打开的文件对话框,然后关闭它,然后弹出另一个对话框。这不应该发生。我再次关闭它,然后主窗体可能有一些重绘问题。最后,我关闭了主窗体,但程序仍在运行。

    请自行尝试,如果发生这一切,请告诉我。

    为什么会这样?我该怎么做才能解决它?

    您可以使用它来重现问题:

    ToolStripButton

2 个答案:

答案 0 :(得分:1)

  

为什么会发生这种情况?

我真的不知道,这对我来说是一个惊喜!!

  

我该怎么做才能解决它?

这是一个简单的解决方法:

private bool clicked = false;
private void toolStripButton1_Click(object sender, EventArgs e)
{
    if (clicked) return;
    clicked = true;
    openFileDialog1.ShowDialog();
    clicked = false;
}

<强>编辑:
我认为问题不是双击本身,而是OpenFileDialog行为 如果您尝试此代码,即使(意外)双击,错误也会消失:

private void toolStripButton1_Click(object sender, EventArgs e)
{
    using (OpenFileDialog dlg = new OpenFileDialog()
    {
        Title = "Open file",
        Filter = "PDF files|*.pdf|All files|*.*"
    })
    {
        dlg.ShowDialog();
        Debug.WriteLine(dlg.FileName);
    }
}

如果您使用tsb1.DoubleClickEnabled = true错误消失...但我不确定这是一个很好的解决方案

答案 1 :(得分:1)

我决定使用它(暂时):

private void toolStripButton1_Click(object sender, EventArgs e)
{
    toolStripButton1.Enabled = false;
    openFileDialog1.ShowDialog();
    toolStripButton1.Enabled = true;
}