加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 没有关闭表单的DialogResult?

发布时间:2020-12-15 04:20:38 所属栏目:百科 来源:网络整理
导读:我有一个表单Form1,我从中将Form2显示为模态表单.从Form2我做了所有类型的编辑和删除不同的值集合,这些值应该在关闭Form2后反映在Form1中.因此,在关闭Form2之后,我所做的是RePopulateControls_in_Form1().由于RePopulateControls_in_Form1()是一个很长的进程
我有一个表单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上设置DialogResult会隐藏表单并从ShowDialog返回.如果要延迟该操作直到用户执行其他操作(例如关闭表单),则应将该状态存储为成员字段,并在Form.Closing的处理程序中设置DialogResult.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读