WPF 如何关闭除主窗体以外的窗体?

时间:2022-03-11 00:57:14
在WPF中   有主窗体W0   通过控件可以打开W1 W2和W3共3个窗体

现需要在打开其中一个窗体的时候将其他的窗体关闭,如何做?而且本窗口不能被多次打开,而W0窗体我还要用来做键盘   子窗体只能打开一个,互斥。
有没人搞过,我现在焦头烂额啊

3 个解决方案

#1


不是主窗体W0都把它关掉~ 


 private void CCForm()
        {
            int n = Application.Current.Windows.Count;
            ArrayList FormNameList = new ArrayList();
            for (int a = 0; a < n; a++)
            {
                FormNameList.Add(Application.Current.Windows[a].Name);
            }
            for (int a = 0; a < n; a++)
            {
                for (int i = 0; i < Application.Current.Windows.Count; i++)
                {
                    string x = Application.Current.Windows[i].Name;
                    if (x != "主窗体W0") Application.Current.Windows[i].Close();

                }
            }
        }

#2


应该这样就行了!


private void CCForm()
        {
            int n = Application.Current.Windows.Count;           
          
            for (int a = 0; a < n; a++)
            {
                for (int i = 0; i < Application.Current.Windows.Count; i++)
                {
                    string x = Application.Current.Windows[i].Name;
                    if (x != "主窗体W0") Application.Current.Windows[i].Close(); 
                }
            }
        }

#3


weboscar,你好

我按照你给的代码试了下,不知道哪里还有问题。只能在调用窗口的时候实例化,结果就是同一窗口能打开多个
而且我在调用第二种窗口的时候会报这个错误:

索引超出范围。必须为非负值并小于集合大小。
参数名: index

#1


不是主窗体W0都把它关掉~ 


 private void CCForm()
        {
            int n = Application.Current.Windows.Count;
            ArrayList FormNameList = new ArrayList();
            for (int a = 0; a < n; a++)
            {
                FormNameList.Add(Application.Current.Windows[a].Name);
            }
            for (int a = 0; a < n; a++)
            {
                for (int i = 0; i < Application.Current.Windows.Count; i++)
                {
                    string x = Application.Current.Windows[i].Name;
                    if (x != "主窗体W0") Application.Current.Windows[i].Close();

                }
            }
        }

#2


应该这样就行了!


private void CCForm()
        {
            int n = Application.Current.Windows.Count;           
          
            for (int a = 0; a < n; a++)
            {
                for (int i = 0; i < Application.Current.Windows.Count; i++)
                {
                    string x = Application.Current.Windows[i].Name;
                    if (x != "主窗体W0") Application.Current.Windows[i].Close(); 
                }
            }
        }

#3


weboscar,你好

我按照你给的代码试了下,不知道哪里还有问题。只能在调用窗口的时候实例化,结果就是同一窗口能打开多个
而且我在调用第二种窗口的时候会报这个错误:

索引超出范围。必须为非负值并小于集合大小。
参数名: index