首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不关闭窗体的DialogResult?

不关闭窗体的DialogResult?
EN

Stack Overflow用户
提问于 2011-07-30 13:36:11
回答 3查看 10.2K关注 0票数 6

我有一个将Form2显示为模式表单的表单Form1。在Form2中,我对不同的值集执行各种编辑和删除操作,这些操作应该在关闭Form2之后反映在Form1中。所以我要做的是在关闭Form2之后执行RePopulateControls_in_Form1()。因为RePopulateControls_in_Form1()是一个很长进程,所以我只想在Form2中发生某些修改(编辑、添加、删除)时才执行该方法,而不是在Form2刚刚打开和关闭时执行。

这就是我在Form1中尝试做的事情

代码语言:javascript
复制
        Form2 f = new Form2();
        if (f.ShowDialog(this) == DialogResult.Something)
            RePopulateControls_in_Form1()

然后在Form2中,我做到了,

代码语言:javascript
复制
    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。如果它不是.NoneForm2就会被关闭。我不想让Form2自己简单地关闭它,除非用户关闭它。

如果我这样做:

代码语言:javascript
复制
    //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中创建的是图形用户界面控件及其标签等)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-30 13:48:45

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

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

票数 11
EN

Stack Overflow用户

发布于 2011-07-30 13:55:04

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

票数 2
EN

Stack Overflow用户

发布于 2011-07-30 13:50:41

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6881321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档