6

我有一个表单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简单地关闭。除非用户关闭它,否则我不想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()没有被击中!

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

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

4

3 回答 3

11

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

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

于 2011-07-30T05:48:45.333 回答
2

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

于 2011-07-30T05:55:03.963 回答
0

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

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

于 2011-07-30T05:50:40.960 回答