Предотвращение события загрузки на каждом 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";
}
Другие вопросы по тегам