[code]private void button1_Click(object sender, EventArgs e){Form2 f2 = new Form2();f2.ShowDialog();}
这样写会导致打开from2界面时,from1操作不了
[code]private void button1_Click(object sender, EventArgs e){Form2 f2 = new Form2();f2.Show();}
使用Show()可以打开子窗口,同时也可以操作父窗口,但是这样写同时也会导致,在父窗口多次点击产生多个窗口的情况,所以这个时候就要判断
1、在主界面的类中定义内部全局变量
[code]private static Form1 newF;
2、在button函数中定义
[code]private void button1_Click(object sender, EventArgs e){if (newF == null || newF.IsDisposed){newF = new Form1();newF.Show();}else{newF.WindowState = FormWindowState.Normal;newF.Activate();}}
即如果检测到Form1窗体不存在的话就new一个,这样的话就能保证最多存在一个Form1的实例。
但是如果每个button再写一个这样的函数的话就很麻烦而且冗余。
于是想到了泛型,便有了下面的代码,定义一个泛型函数
[code]public static void Formshow<T>(ref T newForm) where T : Form,new(){if (newForm == null || newForm.IsDisposed){newForm = new T();newForm.Show();}else{newForm.WindowState = FormWindowState.Normal;newForm.Activate();}}
使用
[code]private void button1_Click(object sender, EventArgs e){Formshow<Form1>(ref newF);}
注意ref,如果没加ref标识符会导致newF无法赋值,就会每点一次都实例化一个窗体。
然后要注意的是Form1的构造函数不能含有参数,按照有参数写的话会报错。