不关闭窗体的对话框结果

本文关键字:对话框 结果 窗体 | 更新日期: 2023-09-27 18:04:13

我有一个表单Form1,从中我将Form2显示为模态表单。从Form2我做各种编辑和删除不同的一组值,应该在Form2关闭后反映在Form1。所以我做的是关闭Form2后的RePopulateControls_in_Form1()。由于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。我不希望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;
    }

RePopulateControls_in_Form1()未命中!

简而言之,在我的程序中,我如何告诉编译器只有在Form2中的值被修改时才调用RePopulateControls_in_Form1() ?

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

不关闭窗体的对话框结果

在Form上设置dialgresult隐藏表单并从ShowDialog返回。如果你想延迟到用户执行其他动作(比如关闭表单),你应该将该状态存储为成员字段,并在form . closing的处理程序中设置dialgresult。

另外,如果你想在按下按钮时取消模态形式,你可以使用button。属性,而不是创建一个按钮。单击处理程序。

一种简单的方法可能是根本不使用dialgresult,而是使用一个不干扰表单行为的专用属性。-然后你应该能够编程任何你想要的逻辑。

我将在表单2中使用事件。当Form2关闭时触发该事件。在Form1中处理该事件将允许您执行任何想要的处理。此外,如果需要的话,您可以在参数中将Form2到Form1的一些信息传递回事件。

另一种方法是设置一个全局静态变量——可能只是一个bool。然后Form2可以根据是否进行了更改将其设置为true或false。当Form2返回时,Form1可以读取此值,如果为true,则进行处理并将其设置为false。