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;
}
}
}
搜索笔记:
winform使用ShowDialog后,调用异步线程(async)等待(await)时,还未执行完毕,form就关了
https://blog.csdn.net/u012549951/article/details/107689593?spm=1001.2101.3001.6650.10&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-10-107689593-blog-86597538.pc_relevant_3mothn_strategy_and_data_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-10-107689593-blog-86597538.pc_relevant_3mothn_strategy_and_data_recovery&utm_relevant_index=14
winform 多线程中ShowDialog()步骤无效的解决办法
https://chenyuan.blog.csdn.net/article/details/86597538?spm=1001.2101.3001.6650.9&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-9-86597538-blog-93811187.pc_relevant_3mothn_strategy_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-9-86597538-blog-93811187.pc_relevant_3mothn_strategy_recovery&utm_relevant_index=10

浙公网安备 33010602011771号