zoukankan      html  css  js  c++  java
  • C#中SHOWDIALOG()与SHOW()的区别_模态与非模态_销毁与释放

    Dispose() Close()

    C#中showDialog()与show()的区别
    showdialog方法 有 驻权交回 的功能
    C# show和showdialog区别


    在C#中窗口的显示有两种方式:
    模态显示(showdialog)
    非模态显示(show)。

    二者最常见的区别是:
    模态显示后,弹出窗口阻止调用窗口的所有消息响应。
    只有在弹出窗口结束后调用窗口才能继续。
    在模态窗口“关闭”后,可以读取模态窗口中信息,包括窗口的返回状态,窗口子控件的值。

    非模态显示后,
    可以在弹出窗口和调用窗口之间随意切换。
    调用窗口调用show方法后,下面的代码可以立即执行。
    在非模态窗口关闭后,窗口的所有资源被释放,窗口不存在,
    无法获取窗口的任何信息。

    MSDN上对showdialog的解释:

    当窗体显示为模式对话框时,单击“关闭”按钮(窗体右上角带 X 的按钮)会隐藏窗体并将 DialogResult 属性设置为 DialogResult.Cancel。与无模式窗体不同,当用户单击对话框的关闭窗体按钮或设置 DialogResult 属性的值时,.NET Framework 不调用 Close 方法。窗体转而可以隐藏并可重新显示,而不用创建该对话框的新实例。因为未关闭显示为对话框的窗体,所以在您的应用程序不再需要该窗体时,必须调用该窗体的 Dispose 方法。

    也就是说,非模态窗口在关闭时,会调用close方法,进而调用dispose方法,将窗口资源进行回收,所以窗口关闭后,不能在获取窗口信息。

    模态窗口在关闭时,不会调用close方法,也不调用dispose方法,窗口仍然存在,占有资源,所以可以继续获得窗口相关信息,在窗口不再使用时,需要手动释放资源。
    [csharp] view plain copy
    Form2 testDialog = new Form2();

    if (testDialog.ShowDialog(this) == DialogResult.OK)
    {
    this.txtResult.Text = testDialog.TextBox1.Text; // 窗口关闭后,还可以继续访问窗口的子控件值
    }
    else
    {
    this.txtResult.Text = "Cancelled";
    }
    // 关闭窗口
    // 其他操作
    ......
    ......
    testDialog.ShowDialog(); // 模态窗口关闭后,可以再次显示出来
    testDialog.Dispose(); // 当模态窗口不再使用时,
    应该调用dispose方法释放资源

    Form2 test = new Form2();
    test.Show(); // 非模态显示
    // 关闭窗口
    // 其他操作
    ......
    ......
    test.Show(); // 异常,因为在test关闭时,窗口已经被彻底销毁了,这里必须重新新建一个窗口,然后显示
    // 修改为如下
    test = new Form2(); // 创建一个新窗口,重新分配空间
    test.Show(); // 显示窗口

    面对多窗口的调用的时候,我们往往不喜欢窗口之间的随意切换,那样我们还有花费时间寻找我们要用的窗口,而且,一但出现问题,窗口的顺序也有可能被再次打乱,很是不顺手,那么我们怎么办呢?
    我们可以将show方法转化为showdialog方法,顾名思义,showdialog是一个进行路经绑定的show方法,他是不可以自由切换的,换言之,就是,当你没有关闭你当前页的前提下,你是无法关闭该页面后面的任一页面的,它是当前唯一(路经打开)为true的。

    而show方法由于未进行绑定,它所显示的各个窗口、对话框是可以相互切换,而不需要关闭当前窗口、对话框。但是他由于未进行绑定,所以每个由show方法打开的窗口的顺序是非固定的,如果遇到什么问题,由show方法打开的窗口的顺序可能会有很大的改变!

    show()仅仅是显示出来窗口界面而已```也就是和你执行的结果在同一窗口显示```所显示的窗口可以在后台运行```而showDialog()是一个对话框窗口界面```执行结果以新窗口界面出现```不允许进行后台运行```就是你想编辑什么的时候```非得先关闭showDialog()窗口界面才可以进行其他操作```

    这就是它们的一点小区别了```

    show()是非模式窗体.
    showDialog()是模式窗体.
    区别在于,以showDialog()打开的窗体,要等窗体关闭后才能操作其他窗体.而show()则不受此限制.

    这是最经常的区别了,
    还有一个我个人使用的心得,你可以了解

    比如你先打开子窗体,想隐藏主窗体。
    如果这个时候用Show的话,则会发生的事情是,打开子窗体的同时主窗体又显示出来,而使用ShowDialog()的时候主要当子窗体关闭的时候主窗体才会显示。
    简单代码如下:
    Form2 f2 = new Form2();
    this.Visible = false;
    f2.ShowDialog();
    this.Visible= true;
    这就是模态对话框的与Show的区别。

    欢迎讨论,相互学习。 txwtech@163.com
  • 相关阅读:
    awt
    登录校验 简单实现
    事务隔离级别
    事务的四大特性(ACID)
    多线程简单了解
    Eureka bug
    什么是存储过程
    filter和servlet的区别
    说说你对多线程锁机制的理解
    session的生命周期,session何时创建,何时销毁,session销毁的方式
  • 原文地址:https://www.cnblogs.com/txwtech/p/14722906.html
Copyright © 2011-2022 走看看