两种方法
第一种:使用委托,但是需要用到全局变量,不太想用。(有知道不用全局变量的方法请告诉我一下)
第二种:使用Control的Tag属性。
Form_SelectDate form = new Form_SelectDate(); form.TopMost = true;//设置置顶 form.ShowDialog();//只能调用模式对话框 string s = form.Tag.ToString(); form.Dispose();//释放资源,调用ShowDialog后方法关闭不会自动释放资源,Show会释放
最好设置弹窗窗体置顶:TopMost = true;
注意使用:ShowDialog后方法关闭不会自动释放资源,需要执行Dispose();
具体区别:https://www.cnblogs.com/dahloong/p/9139542.html
在C#中窗口的显示有两种方式:模态显示(showdialog)和非模态显示(show)。 二者最常见的区别是:
模态显示后, 弹出窗口阻止调用窗口的所有消息响应。 只有在弹出窗口结束后调用窗口才能继续。
在模态窗口“关闭”后,可以读取模态窗口中信息,包括窗口的返回状态,窗口子控件的值。非模态显示后, 可以在弹出窗口和调用窗口之间随意切换。 调用窗口调用show方法后,下面的代码可以立即执行。
在非模态窗口关闭后,窗口的所有资源被释放,窗口不存在,无法获取窗口的任何信息。MSDN上对showdialog的解释:
当窗体显示为模式对话框时,单击“关闭”按钮(窗体右上角带 X 的按钮)会隐藏窗体并将 DialogResult 属性设置为
DialogResult.Cancel。与无模式窗体不同,当用户单击对话框的关闭窗体按钮或设置 DialogResult
属性的值时,.NET Framework 不调用 Close
方法。窗体转而可以隐藏并可重新显示,而不用创建该对话框的新实例。因为未关闭显示为对话框的窗体,所以在您的应用程序不再需要该窗体时,必须调用该窗体的
Dispose 方法。
public static string GetSelectDate()
{
Form_SelectDate form = new Form_SelectDate();
form.Disposed += Disposeds;
Console.WriteLine("ShowDialog1");
form.ShowDialog();
string s = form.Tag.ToString();
//Console.WriteLine("Show1");
//form.Show();
//Console.WriteLine("Show2");
//form.Show();
Console.WriteLine("return");
return s;
}
private static void Disposeds(object sender, EventArgs e)
{
Console.WriteLine("我被释放了");
}
输出:
ShowDialog1
return
public static string GetSelectDate()
{
Form_SelectDate form = new Form_SelectDate();
form.Disposed += Disposeds;
Console.WriteLine("ShowDialog1");
form.ShowDialog();
string s = form.Tag.ToString();
Console.WriteLine("Show1");
form.Show();
Console.WriteLine("Show2");
form.Show();
Console.WriteLine("return");
return s;
}
private static void Disposeds(object sender, EventArgs e)
{
Console.WriteLine("我被释放了");
}
输出:
ShowDialog1
Show1
Show2
return
我被释放了



