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;
                }
            }
        }

  

 

猜你喜欢

转载自www.cnblogs.com/baozi789654/p/12572511.html