none
C# Winform打开重复窗口? RRS feed

  • 问题

  • 主窗口是SDI模式,打开窗口会出现多个重复窗口,现在想实现:打开一个窗口,当点第二次的时候,激活该窗口,不会在出现一个相同的窗口?谢谢!
    2012年4月3日 11:07

答案

  •    //防止打开多个窗体 
            private bool ShowChildrenForm(string p_ChildrenFormText)
            {
                int i; 
                //依次检测当前窗体的子窗体
                for (i = 0; i < this.MdiChildren.Length; i++)
                { //判断当前子窗体的Text属性值是否与传入的字符串值相同 
                    if (this.MdiChildren[i].Text == p_ChildrenFormText)
                    { //如果值相同则表示此子窗体为想要调用的子窗体,激活此子窗体并返回true值 
                        this.MdiChildren[i].Activate();
                        return true;
                    }
                } 
                //如果没有相同的值则表示要调用的子窗体还没有被打开,返回false值 
                return false;
            }


    http://blog.csdn.net/zx13525079024

    2012年4月5日 1:42
  •         private void button1_Click(object sender, EventArgs e)
            {
                bool isExitFormConfig = false;//判断配置窗口是否已经打开,防止重复打开多个配置窗口Form6
                foreach (Form openForm in Application.OpenForms)
                {
                    if (openForm.Name == "Form6")
                    {
                        openForm.Visible = true;//如果配置窗口已打开则将其显示
                        openForm.Activate();//并激活该窗体
                        isExitFormConfig = true;
                        break;
                    }
                }
                if (!isExitFormConfig)
                {
                    Form6 fc = new Form6();
                    fc.Show();
                    fc.TopMost = true;
                }
            }


    http://blog.csdn.net/zx13525079024


    • 已编辑 开心 2012年4月5日 5:40
    • 已标记为答案 施巍 2012年4月5日 11:08
    2012年4月5日 5:40

全部回复

  • 主窗口是SDI模式,打开窗口会出现多个重复窗口,现在想实现:打开一个窗口,当点第二次的时候,激活该窗口,不会在出现一个相同的窗口?谢谢!
    使用Form.ShowDialog,不要使用Form.Show。

    努力~

    2012年4月3日 11:47
  •    //防止打开多个窗体 
            private bool ShowChildrenForm(string p_ChildrenFormText)
            {
                int i; 
                //依次检测当前窗体的子窗体
                for (i = 0; i < this.MdiChildren.Length; i++)
                { //判断当前子窗体的Text属性值是否与传入的字符串值相同 
                    if (this.MdiChildren[i].Text == p_ChildrenFormText)
                    { //如果值相同则表示此子窗体为想要调用的子窗体,激活此子窗体并返回true值 
                        this.MdiChildren[i].Activate();
                        return true;
                    }
                } 
                //如果没有相同的值则表示要调用的子窗体还没有被打开,返回false值 
                return false;
            }


    http://blog.csdn.net/zx13525079024

    2012年4月5日 1:42
  •    //防止打开多个窗体 
            private bool ShowChildrenForm(string p_ChildrenFormText)
            {
                int i; 
                //依次检测当前窗体的子窗体
                for (i = 0; i < this.MdiChildren.Length; i++)
                { //判断当前子窗体的Text属性值是否与传入的字符串值相同 
                    if (this.MdiChildren[i].Text == p_ChildrenFormText)
                    { //如果值相同则表示此子窗体为想要调用的子窗体,激活此子窗体并返回true值 
                        this.MdiChildren[i].Activate();
                        return true;
                    }
                } 
                //如果没有相同的值则表示要调用的子窗体还没有被打开,返回false值 
                return false;
            }


    http://blog.csdn.net/zx13525079024

    您好,主窗口是SDI,不是MDI,还能用MdiChildren吗?
    2012年4月5日 3:09
  • dear

    不知你指的SDI是啥??

    以下会是你要的吗??

    http://www.dotblogs.com.tw/yc421206/archive/2009/08/08/9948.aspx


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/

    2012年4月5日 3:16
  • 不还意思,没说清楚,现在补充下:

    我想要的效果是:有一个主窗口 form1,form1上有一个主菜单,打开主菜单上的一个菜单项 item1,弹出窗口form2,现在form2不是显示在form1里,而是显示在系统任务栏下。当我点击item1 N次时,任务栏就会出现N个form2,不使用showdialog()如何实现只显示一个?
    2012年4月5日 4:49
  •         private void button1_Click(object sender, EventArgs e)
            {
                bool isExitFormConfig = false;//判断配置窗口是否已经打开,防止重复打开多个配置窗口Form6
                foreach (Form openForm in Application.OpenForms)
                {
                    if (openForm.Name == "Form6")
                    {
                        openForm.Visible = true;//如果配置窗口已打开则将其显示
                        openForm.Activate();//并激活该窗体
                        isExitFormConfig = true;
                        break;
                    }
                }
                if (!isExitFormConfig)
                {
                    Form6 fc = new Form6();
                    fc.Show();
                    fc.TopMost = true;
                }
            }


    http://blog.csdn.net/zx13525079024


    • 已编辑 开心 2012年4月5日 5:40
    • 已标记为答案 施巍 2012年4月5日 11:08
    2012年4月5日 5:40
  • 非常谢谢开心,可以实现了!
    2012年4月5日 11:07