C# Winform 子窗口的单实例模式
(每个子窗口只能实例化一次,重复点击将打开已存在的实例)
如题,要点是通过Application.OpenForms属性实现。属性摘要:获取为应用程序所有的已打开窗体的集合。
代码如下:Form2和Form3是两个子窗体类
private void button1_Click(object sender, EventArgs e) { this.Show(new Form3()); } private void button2_Click(object sender, EventArgs e) { this.Show(new Form2()); } //判断窗口类型是否存在 private bool IsExist(string formType) { bool flag = false; foreach (Form item in Application.OpenForms) { if (formType == item.GetType().ToString()) flag = true; } return flag; } //显示窗口 private void Show(Form form) { //窗口已存在,则获取该窗口焦点 if (IsExist(form.GetType().ToString())) { foreach (Form item in Application.OpenForms) { if (item.GetType().ToString() == form.GetType().ToString()) { //每次判断需要新建一个实例,在此释放 form.Dispose(); item.Show();
//获取窗口焦点 item.Activate(); } } } else { //窗口不存在,打开新窗口 form.Show(); form.Activate(); } }
使用GetType()函数必须初始化一个窗口实例,后续如果判断该实例已打开(Application.OpenForms),又要销毁原先实例,不知道有没有其他方法能规避这个操作。
以上,做个笔记,加深印象。