• winform显示窗口Show()和ShowDialog()的区别


    1. 非模态窗口方式(可以跟其他界面自由切换,而且不阻塞代码)
    Show()方法启动的窗口是非模态窗口,可以跟其他界面自由切换,

    其后面的代码也会立刻执行,如:

    Form1 form1 = new Form1();

    form1.Show();

    MessageBos.Show("这里会马上显示");

    2. 模态窗口(必须关闭了该窗口,后面的代码才会执行,并且不能跟其他界面自由切换)
    ShowDialog()打开的窗口为模态窗口(只是个名字而已),
    区别在于,以showDialog()打开的窗体,要等窗体关闭后才能操作其他窗体.而show()则不受此限制.

    此类窗口不能和别的窗口自由切换,而且其后面的代码必须等关闭该窗口才会执行(就像被阻塞在那里了)

    如:

    Form1 form1 = new Form1();

    form1.ShowDialog();

    MessageBos.Show("必须关闭了form1, 这里才会显示");

    例如登录窗口
    主程序入口:

     static class Program
        {
            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                FrmLogin objFrm = new FrmLogin();
                DialogResult result= objFrm.ShowDialog();//模式对话框,对话框模式的是有返回值的
                if (result == DialogResult.OK)//说明登录成功了
                {
                    //登录成功,显示主窗体
                    FrmMain obj = new FrmMain();
                    Application.Run(obj);
    
                }
                else
                {
                    Application.Exit();
                }
            }
        }  

    登录窗口

            private void btn_Login_Click(object sender, EventArgs e)
            {
                //判断是否选中匿名登录(不用输入用户名和密码直接登录的)
                if (this.chk_UsePwd.Checked)
                {
                    this.DialogResult = DialogResult.OK;
                    //CommonMethods.objAdmins.LoginName = "None";
                    CommonMethods.objAdmins=new SysAdmins()
                    {
                        LoginName = "None"
                    };
                }
                else
                {
                    //登录判断
                    if (this.txt_UserId.Text.Trim().Length == 0)
                    {
                        MessageBox.Show("请填写用户名!", "登录提示");
                        this.txt_UserId.Focus();
                        return;
                    }
                    if (!DataValidate.IsInteger(this.txt_UserId.Text.Trim()))//判断用户ID是不是正整数
                    {
                        MessageBox.Show("用户名必须为正整数!", "登录提示");
                        this.txt_UserId.Focus();
                        return;
                    }
                    if (this.txt_Pwd.Text.Trim().Length == 0)
                    {
                        MessageBox.Show("请输入密码!", "登录提示");
                        this.txt_Pwd.Focus();
                        return;
                    }
                    //封装对象
                    SysAdmins objAdmins = new SysAdmins()//初始化对象,设置 id 和 密码 的属性
                    {
                        LoginId = Convert.ToInt32(this.txt_UserId.Text.Trim()),
                        LoginPwd = this.txt_Pwd.Text.Trim()
                    };
                    if (AdminLogin(objAdmins) == null)//没查到
                    {
                        MessageBox.Show("用户名或密码错误!", "登录提示");
                    }
                    else//查到了
                    {
                        this.DialogResult = DialogResult.OK;
                        CommonMethods.objAdmins = objAdmins;
                    }
                }
            }
    

      

     

  • 相关阅读:
    ajax请求地址后加随机数防止浏览器缓存
    全新跨平台版本.NET敏捷开发框架-RDIFramework.NET5.0震撼发布
    一网打尽,一文讲通虚拟机VirtualBox及Linux使用
    解放双手,markdown文章神器,Typora+PicGo+七牛云图床实现自动上传图片
    VS2019 创建C++动态库dll----C#调用
    AOP面向切面的编程使用Interceptor内置的容器进行属性注入
    使用IOC内置的容器进行属性注入
    对于2021年整体预判
    亲子教育的六个阶段
    Win10 损坏硬盘命令
  • 原文地址:https://www.cnblogs.com/baozi789654/p/12572511.html
Copyright © 2020-2023  润新知