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.