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为非模态对话框且和程序同生命周期

这里写图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值