即使在选择文件 c# 后,打开文件对话框仍继续显示
open file dialog keeps on showing even after choosing file c#
我在 c# 上使用 window 表单 我正在尝试使用打开文件对话框打开文件,当我浏览到我的文件并打开它时,打开文件对话框一直显示很多次。
这是我打开文件的代码:
private void OpenBtn_Click(object sender, EventArgs e)
{
// Create OpenFileDialog
OpenFileDialog dlg = new OpenFileDialog();
// Set filter for file extension and default file extension
dlg.DefaultExt = ".xml";
dlg.Filter = "XML Files (*.xml)|*.xml";
// Display OpenFileDialog by calling ShowDialog method
DialogResult result = dlg.ShowDialog();
if (result == DialogResult.OK)
{
pathtext.Text = dlg.FileName;
sourceName = dlg.FileName;
}
// destFile = resultFile.Name;
if (pathtext.Text != null)
{
createBtn.Enabled = true;
}
}
和表单加载方法的此事件处理程序
OpenBtn.Click += new EventHandler(this.OpenBtn_Click);
我看不出我错过了什么。
我可以重现你的错误的唯一方法是当我双击设计器中的按钮时,它会创建一个自动事件处理程序,你可以在事件属性中看到它:
如果我除了在代码中添加事件 Click
的手动注册之外,例如在 Load
事件中:
private void Form1_Load(object sender, EventArgs e)
{
button2.Click += new EventHandler(this.OpenBtn_Click);
}
然后我会得到对话框弹出两次的行为。如果我再做一次:
private void Form1_Load(object sender, EventArgs e)
{
button2.Click += new EventHandler(this.OpenBtn_Click);
button2.Click += new EventHandler(this.OpenBtn_Click);
}
会弹出3次!您很可能在循环中注册了此事件。所以当第一个被执行时,所有其他人都会跟进。删除手动注册行并将事件处理程序名称简单地放入事件属性中。
编辑:主要问题是运算符 +=
它将代表添加到内部列表中,如 this answer 中所述。
我在 c# 上使用 window 表单 我正在尝试使用打开文件对话框打开文件,当我浏览到我的文件并打开它时,打开文件对话框一直显示很多次。
这是我打开文件的代码:
private void OpenBtn_Click(object sender, EventArgs e)
{
// Create OpenFileDialog
OpenFileDialog dlg = new OpenFileDialog();
// Set filter for file extension and default file extension
dlg.DefaultExt = ".xml";
dlg.Filter = "XML Files (*.xml)|*.xml";
// Display OpenFileDialog by calling ShowDialog method
DialogResult result = dlg.ShowDialog();
if (result == DialogResult.OK)
{
pathtext.Text = dlg.FileName;
sourceName = dlg.FileName;
}
// destFile = resultFile.Name;
if (pathtext.Text != null)
{
createBtn.Enabled = true;
}
}
和表单加载方法的此事件处理程序
OpenBtn.Click += new EventHandler(this.OpenBtn_Click);
我看不出我错过了什么。
我可以重现你的错误的唯一方法是当我双击设计器中的按钮时,它会创建一个自动事件处理程序,你可以在事件属性中看到它:
如果我除了在代码中添加事件 Click
的手动注册之外,例如在 Load
事件中:
private void Form1_Load(object sender, EventArgs e)
{
button2.Click += new EventHandler(this.OpenBtn_Click);
}
然后我会得到对话框弹出两次的行为。如果我再做一次:
private void Form1_Load(object sender, EventArgs e)
{
button2.Click += new EventHandler(this.OpenBtn_Click);
button2.Click += new EventHandler(this.OpenBtn_Click);
}
会弹出3次!您很可能在循环中注册了此事件。所以当第一个被执行时,所有其他人都会跟进。删除手动注册行并将事件处理程序名称简单地放入事件属性中。
编辑:主要问题是运算符 +=
它将代表添加到内部列表中,如 this answer 中所述。