DialogResult, который не закрывает форму?
у меня есть форма Form1
, из которого вывести Form2
как модальная форма. От Form2
Я делаю все виды редактирования и удаления различного набора значений, которые должны быть отражены в Form1
после закрытия Form2
. Так что я делаю RePopulateControls_in_Form1()
после закрытия Form2
. С RePopulateControls_in_Form1()
это долгий процесс, я хочу выполнить этот метод только в том случае,если в Form2
и когда Form2
просто открывается и закрывается.
так вот что я пытаюсь сделать в Form1
:
Form2 f = new Form2();
if (f.ShowDialog(this) == DialogResult.Something)
RePopulateControls_in_Form1()
и затем в Form2 я делаю,
private void bntEdit()
{
//If Edit?
this.DialogResult = DialogResult.Something;
}
private void bntAdd()
{
//If Add?
this.DialogResult = DialogResult.Something;
}
private void bntDelete()
{
//If Delete?
this.DialogResult = DialogResult.Something;
}
но моя проблема-это .Something
. Если это что-то иное, чем .None
, Form2
просто закрывают. Я не хочу!--4--> чтобы просто закрыться самостоятельно, если пользователь не закрывает его.
если я сделаю это:
//in Form1
private void Form1_Click()
{
Form2 f = new Form2();
if (f.ShowDialog(this) == DialogResult.None)
RePopulateControls_in_Form1()
}
//in Form2
private void Form2_SomeModification()
{
//If Modified?
this.DialogResult = DialogResult.None;
}
RePopulateControls_in_Form1()
не попал!
короче, в моей программе, как я могу сказать компилятору, чтобы позвонить RePopulateControls_in_Form1()
только если значения изменяются в Form2
?
Примечание: повторное заполнение, безусловно, требуется, так как элементы управления динамически создаются и немного сложны (на самом деле то, что создается в Form2
это элементы управления GUI и его метки и т. д.).
3 ответов
настройка DialogResult на форме скрывает форму и возвращает из ShowDialog. Если вы хотите отложить это до тех пор, пока пользователь не выполнит какое-либо другое действие (например, закрытие формы), вы должны сохранить это состояние как поле-член и установить DialogResult в обработчике формы.Закрытие.
кроме того, если вы хотите отклонить модальную форму при нажатии кнопки, вы можете использовать кнопку.DialogResult свойство вместо создания кнопки.Щелкните обработчик.
простой способ может быть не использовать DialogResult вообще, но выделенное свойство, не мешающее поведению формы. - Тогда ты сможешь запрограммировать любую логику, какую захочешь.
Я бы использовал событие в форме 2. Запустите это событие, когда ваша Form2 закрывается. Обработка этого события в Form1 позволит вам выполнить любую обработку, которую вы хотите. Далее, если необходимо, вы можете передать некоторую информацию из Form2 в Form1 в параметрах событию.
альтернативой было бы настроить глобальную статическую переменную-возможно, просто bool. Затем Form2 может установить значение true или false в зависимости от того, были ли внесены изменения. Form1 может прочитать это, когда Form2 возвращает и если true выполняет обработку и устанавливает его обратно в false.