Предотвращение события загрузки на каждом ShowDialog
ParentForm содержит только одну кнопку "Открыть вторую форму" по событию, которое она вызывает.
private void Parent_Click(object sender, EventArgs e)
{
ChildForm _chld = new ChildForm();
_chld.ShowDialog();
}
private void ChildForm_Load(object sender, EventArgs e)
{
textBox1.Text = "This is Child Form";
}
private void Ok_Click(object sender, EventArgs e)
{
this.Hide();
}
Дочерняя форма содержит текстовое поле, кнопки Ok и ChildForm_Load, событие Child_Click кнопки OK.
При нажатии кнопки "Открыть вторую форму" открывается дочерняя форма с содержанием "Это дочерняя форма" в текстовом поле.
Здесь мой сценарий такой,
Когда я впервые нажимаю на Open Second Form, он открывает ChildForm с содержимым "Это дочерняя форма" в текстовом поле. Я изменил текстовое поле на "Это родительская форма", а затем ОК.
Но когда я снова нажимаю на кнопку "Открыть вторую форму", текст в текстовом поле показывает старый текст "Это дочерняя форма", но не измененный текст "Это родительская форма". Значение не сохраняется в текстовом поле.
Я думаю, что событие Load запускается для каждого showdialog(). Есть ли способ предотвратить событие загрузки во второй раз.
1 ответ
Вы создаете новую форму каждый раз, поэтому отображаются значения по умолчанию. Я предполагаю, что вы хотите, чтобы отображался только один ChildForm, поэтому переместите переменную в область родительской формы:
ChildForm _chld = new ChildForm();
private void Parent_Click(object sender, EventArgs e)
{
_chld.ShowDialog();
}
Обязательно избавьтесь от этой ChildForm тоже, когда родитель закрывается:
protected override void OnFormClosing(FormClosingEventArgs e) {
_chld.Dispose();
}
Событие Load все равно будет срабатывать, поэтому просто удалите вашу строку или переместите ее в конструктор:
public ChildForm() {
this.InitializeComponent();
this.textBox1.Text = "This is Child Form";
}