因为工作中出现的问题,来记录一下涉及到的模态和非模态对话框
简要介绍一下两个的区别:
非模态对话框模态对话框
调用窗口形式
窗体实例化对象.show()
窗体实例化对象.showdialog()
弹出后
可以切换到其他界面
未关掉前不能切换到其他界面
关闭后
自动释放资源模态对话框是什么时候实例的对话框,托管形式进行垃圾回收;DialogResult.ToStrring()==None;
仅隐藏窗体,不会主动释放资源,不会被主动垃圾回收;DialogResult.ToString()==Cancel;窗体对象.Visiable=false
其他
调用show()之后即可继续执行其他操作
关闭对话框后,才执行函数旁边的操作
需要注意的是,如果关掉对话框后仍须要调用对话框中变量模态对话框是什么时候实例的对话框,需要用模态对话框;在考虑保留对话框数据信息,仅是想隐藏对话框时使用模态对话框,关闭时也可以调用this.Hide()也可不调用。简易代码如下:
namespace FileOpen //主界面
{
public partial class OpenFile : Form
{
public OpenFile()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
ShowDialog openDialog = new ShowDialog();
openDialog.ShowDialog();
MessageBox.Show(openDialog.DialogResult.ToString());
if (openDialog.Visible.ToString().ToLower() == "false")
{
MessageBox.Show("模态窗体关闭后Visible为False,并未释放");
}
}
private void button2_Click(object sender, EventArgs e)
{
ShowDlg openDlg = new ShowDlg();
openDlg.Show();
MessageBox.Show(openDlg.DialogResult.ToString());
}
}
}
namespace FileOpen
{
public partial class ShowDialog : Form//模态对话框
{
public ShowDialog()
{
InitializeComponent();
}
private void ShowDialog_FormClosed(object sender, FormClosedEventArgs e)
{
MessageBox.Show("模态窗体关闭后DialogResult为" + this.DialogResult.ToString());
}
}
}
namespace FileOpen
{
public partial class ShowDlg : Form//非模态对话框
{
public ShowDlg()
{
InitializeComponent();
}
private void ShowDlg_FormClosed(object sender, FormClosedEventArgs e)
{
MessageBox.Show("非模态窗体关闭后DialogResult为" + this.DialogResult.ToString());
}
}
}