Winform非模态对话框

来源:互联网 发布:kk棋牌源码 编辑:程序博客网 时间:2024/06/10 10:59

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

0 0
原创粉丝点击