Диалог открытия файла продолжает отображаться даже после выбора файла C#
Я работаю с оконными формами на C# Я пытаюсь открыть файл, используя диалог openfile, когда я просматриваю свой файл и открываю его, диалог открытия файла продолжает показываться много раз.
Вот мой код для открытия файла:
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);
Я не вижу, где я пропустил это.
1 ответ
Единственный способ воспроизвести вашу ошибку - это дважды щелкнуть кнопку в конструкторе, чтобы он создал автоматический обработчик событий, который можно увидеть в свойствах события:
Если я в дополнение к этому добавлю в код ручную регистрацию события 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 раза! Весьма вероятно, что вы зарегистрируете это событие в цикле. Поэтому, когда выполняется первый, все остальные просто следуют. Удалите строку регистрации вручную и поместите имя обработчика события просто в свойства события.
РЕДАКТИРОВАТЬ: Основная проблема оператора +=
он добавляет делегатов во внутренний список, как описано в этом ответе.