代码如下,我现在要判断十多个窗口,再一个个显示出来,如何用一句代码实现所有的子窗口全部重新加载load一次呀?类似 frm_main_Load(sender, e); 目前用的是销毁子窗体,重新打开,能否不销毁,直接重截每一个子窗体呀?
 
因为我作的多国语言,选择一种语言,所有的窗口都要重新加载一次才能变换语言。
 
          frm_buy f1 = new frm_buy();
            frm_lct f2 = new frm_lct();
          ...省略十几个窗口
            foreach (Form frm in this.MdiChildren)//遍历已打开的所有子窗体
            {
                if (frm.Name == f1.Name)
                {
                    frm.Dispose();
                    f1.MdiParent = this;//设置父窗体
                    f1.Show();
                }
                else if (frm.Name == f2.Name)
                {
                    frm.Dispose();
                    f2.MdiParent = this;//设置父窗体
                    f2.Show();
                }
                ...省略十几个窗口            }

解决方案 »

  1.   

    Application.Restart();  得了
      

  2.   

    不知道你在设计的时候是怎么弄的,但是建议你在打开窗口的时候使用工厂模式,同时在打开的时候把打开的窗口实例保存在一个List里面,如果你想实现上面说的功能,一个循环就行了。
      

  3.   

            /// <summary>
            /// 根据窗体名称获取窗体实例
            /// </summary>
            /// <param name="frmName"></param>
            /// <returns></returns>
            public object GetForms(string frmName)
            {
                object result = null;
                if (this.ListForms.Contains(frmName) && (this.ListForms[frmName] as Form).IsDisposed)
                {
                    this.ListForms.Remove(frmName);
                }            if (this.ListForms.Contains(frmName))
                {
                    result = this.ListForms[frmName];
                }
                else
                {
                    result = Assembly.Load("UI").CreateInstance("UI.Sub." + frmName);
                    this.ListForms.Add(frmName, result);
                }
                return result;
            }这个是我用的部分代码,那里面的this.ListForms就是全部的已打开窗口,循环一下就可以了
      

  4.   

    就是窗体重新load一次,这样我的设置语言的语句就会执行一次,语言就变过来了。