单击Strange ToolStripButton可打开OpenFileDialog行为
本文关键字:OpenFileDialog 行为 Strange ToolStripButton 单击 | 更新日期: 2023-09-27 18:29:26
我发现了一个奇怪的ToolStripButton
双击问题。这些步骤将重现问题:
- 创建Windows窗体应用程序
- 在主窗体上添加一个
ToolStrip
- 在
ToolStrip
上添加一个ToolStripButton
- 在主窗体上添加一个
OpenFileDialog
- 在属性工具箱中双击
ToolStripButton
的Click
事件 -
在
toolStripButton1_Click
方法中添加此项:openFileDialog1.ShowDialog();
- 开始调试
- 快速双击
ToolStripButton
问题来了。首先,弹出一个打开的文件对话框,我关闭它,然后弹出另一个对话框。这不应该发生。我再次关闭它,然后主窗体可能有一些重绘问题。最后,我关闭了主窗体,但程序仍在运行。
请你自己试试,如果发生了这些事,请告诉我。
为什么会发生这种情况?我该怎么办才能解决它?
你可以用这个来重现问题:
using System;
using System.ComponentModel;
using System.Windows.Forms;
namespace WinForm
{
class MyForm : Form
{
private IContainer components = null;
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
private void InitializeComponent()
{
openFileDialog1 = new OpenFileDialog();
toolStrip1 = new ToolStrip();
toolStripButton1 = new ToolStripButton();
toolStrip1.SuspendLayout();
this.SuspendLayout();
toolStrip1.Items.AddRange(new ToolStripItem[] { toolStripButton1 });
toolStripButton1.Text = "toolStripButton1";
toolStripButton1.Click += new EventHandler(toolStripButton1_Click);
this.Controls.Add(toolStrip1);
toolStrip1.ResumeLayout(false);
toolStrip1.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
private OpenFileDialog openFileDialog1;
private ToolStrip toolStrip1;
private ToolStripButton toolStripButton1;
public MyForm()
{
InitializeComponent();
}
private void toolStripButton1_Click(object sender, EventArgs e)
{
openFileDialog1.ShowDialog();
}
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MyForm());
}
}
}
为什么会发生这种情况?
我真的不知道,这对我来说是个惊喜!!
我该怎么办才能解决它?
这是一个简单的解决方法:
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
,错误将消失。。。但我不确定这是一个好的解决方案
我决定(现在)使用这个:
private void toolStripButton1_Click(object sender, EventArgs e)
{
toolStripButton1.Enabled = false;
openFileDialog1.ShowDialog();
toolStripButton1.Enabled = true;
}