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

Дочерняя форма содержит текстовое поле, кнопки ОК и событие ChildForm_Load, Child_Click кнопки ОК.

При нажатии кнопки «Открыть вторую форму» открывается дочерняя форма с содержимым «Это дочерняя форма» в текстовом поле.

Вот мой сценарий таков,

Когда я впервые нажимаю на OpenSecondForm, он открывает дочернюю форму с содержимым «Это дочерняя форма» в текстовом поле. Я изменил текстовое поле на «Это родительская форма», а затем ОК.

Но когда я снова нажимаю кнопку «Открыть вторую форму», текст в текстовом поле показывает старый текст «Это дочерняя форма», но не измененный текст «Это родительская форма». Значение не сохраняется в текстовом поле.

Я думаю, что событие Load срабатывает для каждого showdialog(). Есть ли способ предотвратить событие загрузки во второй раз.


person user3253682    schedule 05.08.2014    source источник


Ответы (1)


Вы каждый раз создаете новую форму, поэтому отображаются значения по умолчанию. Я предполагаю, что вы хотите отображать только одну дочернюю форму, поэтому переместите переменную в область родительской формы:

ChildForm _chld = new ChildForm();

private void Parent_Click(object sender, EventArgs e)
{
  _chld.ShowDialog();
}

Не забудьте также избавиться от этой дочерней формы, когда родитель закроется:

protected override void OnFormClosing(FormClosingEventArgs e) {
  _chld.Dispose();
}

Событие Load по-прежнему будет срабатывать, поэтому просто удалите свою строку или переместите ее в конструктор:

public ChildForm() {
  this.InitializeComponent();
  this.textBox1.Text = "This is Child Form";
}
person LarsTech    schedule 05.08.2014