窗体不带参数
/// <summary>
/// 获取或创建指定类型的单例窗体
/// </summary>
/// <typeparam name="T">窗体类型(必须继承自Form)</typeparam>
public static void ShowSingletonForm<T>() where T : Form, new()
{
// 查找已打开的同类型窗体
var existingForm = Application.OpenForms.OfType<T>().FirstOrDefault();
if (existingForm != null)
{
// 若已存在,激活并显示到最前
if (existingForm.WindowState == FormWindowState.Minimized)
{
existingForm.WindowState = FormWindowState.Normal;
}
existingForm.BringToFront();
existingForm.Focus();
}
else
{
// 若不存在,创建新实例并显示
var newForm = new T();
newForm.Show();
}
}
//----------------------------------------------------
// 在需要打开Form2的地方调用
//FormSingletonManager.ShowSingletonForm<Form2>();窗体带参数
/// <summary>
/// 显示单例窗体(支持传入一个int参数)
/// </summary>
/// <typeparam name="T">窗体类型(继承自Form)</typeparam>
/// <param name="param">需要传递给窗体的int参数</param>
public static void ShowSingletonForm<T>(int param) where T : Form
{
// 查找已打开的同类型窗体
var existingForm = Application.OpenForms.OfType<T>().FirstOrDefault();
if (existingForm != null)
{
// 若已存在,激活窗体
if (existingForm.WindowState == FormWindowState.Minimized)
{
existingForm.WindowState = FormWindowState.Normal;
}
existingForm.BringToFront();
existingForm.Focus();
// 可选:如果需要更新已打开窗体的参数,可以在这里调用窗体的方法
// 例如:existingForm.UpdateParam(param);
}
else
{
// 若不存在,通过反射创建带int参数的窗体实例
// 要求窗体T必须有一个接收int参数的构造函数,例如:public Form2(int id) { ... }
var newForm = (T)Activator.CreateInstance(typeof(T), param);
newForm.Show();
}
}
//--------------------------------------------
// 打开Form2并传入参数 100(例如ID=100)
//FormSingletonManager.ShowSingletonForm<Form2>(100);本文来自 www.LuoFenMing.com