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),又要销毁原先实例,不知道有没有其他方法能规避这个操作。

     以上,做个笔记,加深印象。

posted @ 2018-01-31 16:09  风口浪猪  阅读(1196)  评论(0编辑  收藏  举报