Winform非模态对话框

在开发中,经常遇到需要创建一个非模态的对话框,弹出后在不关闭的情况下依旧可以查看其它窗体,关闭后资源也不会释放,再次弹出依旧保存上次的结果,最典型的例子是将一些复杂的耗时的任务丢到后台,通过该对话框查看任务的进度,例如360云盘的传输进度功能。

访问我的个人网站获取更多文章


实现思路:

  • 第一步:新建一个窗体TestForm,显示时将其显示为非模态

    private void newform_Click(object sender, EventArgs e)
    {
        TestForm form1=new TestForm();
        form1.show();
    }

    这一步很简单,即创建了一个非模态对话框,但是运行时候发现,当我点击关闭按钮后,窗体关闭了,资源释放了,新建一个窗体不能保存之前的内容了

  • 第二步:处理关闭按钮,不关闭窗体

    一个方案是取消关闭按钮,设置窗体的ControlBox属性为false,但是在任务栏的图表中依旧会有关闭按钮,用户点击后会造成运行错误;

    解决方案其实很简单,处理窗体的关闭按钮事件(FormClosing)即可,代码如下:

     private void TestFrom_FormClosing(object sender, FormClosingEventArgs e)
            {
                this.Hide(); //隐藏窗体
                e.Cancel = true; //取消关闭
            } 

    同时,第一步也要调整,在程序启动时,就已经生成了,即在主窗体中定义变量,单击事件仅响应show方法

    TestForm form1=new TestForm();
    private void newform_Click(object sender, EventArgs e)
    {
        form1.show();
    }

    这样就实现了form1为非模态对话框且和程序同生命周期

这里写图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章