winform唯一窗体

       唯一窗体,你需要考虑几点,首先,你打开和关闭时候的问题,打开新的窗体,是否关闭原先的窗体,考虑到焦点的问题。每次当你打开新的窗体的时候,原先的窗体没有关闭,我们把它存在了一个集合里,判断这个集合里是否有这个窗体,建立的集合,当你删除你新打开的窗体时,只是把后台删了,但集合里还是有这个窗体,这时你再打开新的窗体时需要去比较,看看是否打开的窗体一样,一样的话就直接打开,没有一样的说明集合里没有和你将要打开的窗体一致的,需要你新打开一个窗体。

  public Form1()
        {
            InitializeComponent();
        }

        List<Form> list = new List<Form>();  //建立一个集合  放窗口
        private void 销售ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2(this);
            f2.Name = "f2";
            onlyone(f2); ;

        }
        private void 业务ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form3 f3 = new Form3(this);
            f3.Name = "f3";
            onlyone(f3);
        }

        private void 财务ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form4 f4 = new Form4(this);
            f4.Name = "f4";
            onlyone(f4); //引用查询的方法 ,看看是否在里面
        }

        public void deletefm(Form ff)
        {
            list.Remove(ff); //集合里移除 这个方法用在当关闭其他窗体时。删除只能是你关闭时删除谁,不能删其他的窗口,建立这个方法是为了 ,但你关闭窗口时,集合里还保存着原有的窗口,当你再次打开时,你打开了一个新的窗口,而不是第一个哪一个窗口,所以,当你关闭时,你要删除原先打开那个窗口,打开一个新的。 
        }


        //查找的方法 看看是否在集合里面,如果在理就用,不在里面就添加进去
        public void onlyone(Form newf)
        {
            bool has = false;
            foreach (Form u in list)
            {

                if (u.Name == newf.Name)
                {
                    has = true;
                    newf = u; //集合里原有的那个窗口

                }
            }
            if (has == false)
            {
                newf.Show();
                list.Add(newf);
            }
            else
            {
                newf.WindowState = FormWindowState.Normal;  //窗体的初始可视状态
                newf.Focus();  //j焦点在哪里 
            }
        }


 Form1 F1;
        public Form2(Form1 f1)  //传值过来
        {
            InitializeComponent();
            F1 = f1;
        }

        private void Form2_FormClosing(object sender, FormClosingEventArgs e)
        {
            F1.deletefm(this); //当关闭你打开的窗口时,执行删除的方法,把这个窗口关闭
        }


 
原文地址:https://www.cnblogs.com/liuyubin0629/p/7206252.html