AI智能
改变未来

C#利用泛型,避免子窗体重复开启

[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的构造函数不能含有参数,按照有参数写的话会报错。

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » C#利用泛型,避免子窗体重复开启