DialogResult没有关闭表单?

naw*_*fal 6 c# modal-dialog dialogresult winforms

我有一个表单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()
Run Code Online (Sandbox Code Playgroud)

然后在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;
    }
Run Code Online (Sandbox Code Playgroud)

但我的问题是.Something.如果它不是.None,Form2只需关闭.Form2除非用户关闭它,否则我不想简单地关闭它.

如果我这样做:

    //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;
    }
Run Code Online (Sandbox Code Playgroud)

RePopulateControls_in_Form1() 不打!

简而言之,在我的程序中,RePopulateControls_in_Form1()如果只修改值,我怎么能告诉编译器调用Form2

注意:肯定需要重新填充,因为控件是动态创建的并且有点复杂(实际上创建的Form2是GUI控件及其标签等).

Rya*_*ell 11

在Form上设置DialogResult会隐藏表单并从ShowDialog返回.如果要延迟该操作直到用户执行其他操作(例如关闭表单),则应将该状态存储为成员字段,并在Form.Closing的处理程序中设置DialogResult.

此外,如果您确实要在按下按钮时关闭模式窗体,则可以使用Button.DialogResult属性而不是制作Button.Click处理程序.