C#模态对话框和非模态对话框

因为工作中出现的问题,来记录一下涉及到的模态和非模态对话框

简要介绍一下两个的区别:

 非模态对话框模态对话框
调用窗口方式窗体实例化对象.show()窗体实例化对象.showdialog()
弹出后可以切换到其他界面未关闭前不能切换到其他界面
关闭后

自动释放资源,托管方式进行垃圾回收;DialogResult.ToStrring()==None;

仅隐藏窗体,不会主动释放资源,不会被主动垃圾回收;DialogResult.ToString()==Cancel;窗体对象.Visiable=false
其他调用show()之后即可继续执行其他操作关闭对话框后,才执行函数后面的操作

需要注意的是,如果关闭对话框后仍需要调用对话框中变量,需要用模态对话框;在考虑保留对话框数据信息,仅是想隐藏对话框时使用模态对话框,关闭时也可以调用this.Hide()也可不调用。简易代码如下:

namespace FileOpen  //主界面
{
    public partial class OpenFile : Form
    {
        public OpenFile()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ShowDialog openDialog = new ShowDialog();
            openDialog.ShowDialog();
            MessageBox.Show(openDialog.DialogResult.ToString());
            if (openDialog.Visible.ToString().ToLower() == "false")
            {
                MessageBox.Show("模态窗体关闭后Visible为False,并未释放");
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            ShowDlg openDlg = new ShowDlg();
            openDlg.Show();
            MessageBox.Show(openDlg.DialogResult.ToString());
        }

         
    }
}
namespace FileOpen
{
    public partial class ShowDialog : Form//模态对话框
    {
        public ShowDialog()
        {
            InitializeComponent();
        }

        private void ShowDialog_FormClosed(object sender, FormClosedEventArgs e)
        {
            MessageBox.Show("模态窗体关闭后DialogResult为" + this.DialogResult.ToString());
           
        }
    }
}
namespace FileOpen
{
    public partial class ShowDlg : Form//非模态对话框
    {
        public ShowDlg()
        {
            InitializeComponent();
        }

        private void ShowDlg_FormClosed(object sender, FormClosedEventArgs e)
        {
            MessageBox.Show("非模态窗体关闭后DialogResult为" + this.DialogResult.ToString());
        }

    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值