如题!
        public void Show_Form(string FrmName)
        {
            
            if (FrmName == "分类设置")  //判断当前要打开的窗体
            {
                bool re = true;
                foreach (TabPage page in tabControl_Agr.TabPages)
                {
                    if (page.Text == FrmName)
                    {
                        re = false;
                        this.tabControl_Agr.SelectedTab = page;//激活已打开的窗体
                        break;
                    }
                }
                if (re)//如果没有找到
                {
                    tabControl_Agr.TabPages.Add(???);
                    this.tabControl_Agr.SelectedTab = ???;
                }            }        }
打问号的地方如何用FrmName来表示?

解决方案 »

  1.   

    (Form)Assembly.Load("程序集").CreateInstance("类型名称(全限定命名空间+类型名)");
      

  2.   

    和反射有关系么?
    this.tabControl1.TabPages.Add(FrmName, FrmName);//增加
                this.tabControl1.SelectedTab = this.tabControl1.TabPages[FrmName];//激活
      

  3.   

    谢谢!但我有一个tabpge的name与FrmName一致里面有内容,你样添加选项内容却没有?!只是新增一个选项卡而已!
    我想要的是这样~
    窗体加载时不显示选项卡(移除选项卡)!
            private void AgrMain_Load(object sender, EventArgs e)
            {
                foreach (TabPage page in tabControl_Agr.TabPages)
                {
                    if (page.Text != "")
                    {
                        tabControl_Agr.TabPages.Remove(page);
                    }
                }
             }
    当点击菜单时则显示相应的选项卡,则显示出对应的选项卡
            #region 单击菜单调用窗体事件
            public void Tool_Folk_Click(object sender, EventArgs e)
            {
                this.Show_Form(sender.ToString().Trim()); //调用方法
            }        public void Show_Form(string FrmName)
            {
                    bool re = true;
                    foreach (TabPage page in tabControl_Agr.TabPages)
                    {
                        if (page.Text == FrmName)
                        {
                            re = false;
                            this.tabControl_Agr.SelectedTab = page;//激活已打开的窗体
                            break;
                        }
                    }
                    if (re)//如果没有找到
                    {
                        this.tabControl_Agr.TabPages.Add(this.分类设置);此处是我的一个选项卡名为“分类设置”
                        this.tabControl_Agr.SelectedTab = this.tabControl_Agr.TabPages[FrmName];//激活
                    }
            }
            #endregion
      

  4.   

    你这代码真是只为了实现功能。。//存放所有需要的Page
    Dictionary<string, TabPage> pages = new Dictionary<string, TabPage>();
    TabPage page = tabControl_Agr.TabPages["Name"];
    if (page!=null)
    {
       tabControl_Agr.SelectedTab = page;
    }
    else
    {
         
         if (pages.TryGetValue ("Name",out page))
            {
                 tabControl_Agr.TabPages.Add(page);
                 tabControl_Agr.SelectedTab = page;
            }
       
    }
      

  5.   

    不行啊,老兄弟!能否加你QQ呢?我的QQ:191971159
      

  6.   


            public void Show_Form(string FrmName)
            {
    this.tabControl_Agr.TabPages.Add(this.合同分类);
             }如何“this.合同分类”用FrmName来替代???
    “this.合同分类”这个选项卡里面是有内容的!
      

  7.   

      tabControl1.TabPages.Add(tabPage2);
    tabPage2是tabcontrol中集合中的(name)
      

  8.   

    把需要的page放到pages集合里面,就可以根据名称去找了
      

  9.   

    感谢huang_u、zypine!但我还是没能解决问题,我还是详细的说过想要的过程!
    我在tabControl1中有name为tabPage1、tabPage2、tabPage3、tabPage4在窗口加载时,通编历将这些移除。现在想做的是通过“FrmName”传递来的字符串有tabPage1、tabPage2、tabPage3、tabPage4,如何通传过来的字符串来加载被移除的选项卡?
    如:
    string FrmNameo 字符串为tabPage2,则加载tabPage2
    其实想要的就是“tabPage2”字符串转为name为tabPage2
    public void Show_Form(string FrmName)
      {
    this.tabControl_Agr.TabPages.Add(this.tabPage2);
      }如何“this.tabPage2”用FrmName来替代???
    “this.tabPage2”这个选项卡里面是有内容的!前辈如有指点,请写出完整代码,非常感谢!
      

  10.   


    上面不是有么?     public void Show_Form(string FrmName)
      {
    TabPage tb=tabControl1.TabPages["FrmName"];
    this.tabControl_Agr.TabPages.Add(tb);
      }
      

  11.   

    TabPage page =new TabPage ();
    page.name=FrmName;
    this.tabControl_Agr.TabPages.Add(page );
      

  12.   

    public void Show_Form(string FrmName)
      {
        this.tabControl_Agr.TabPages.Add(this.tabPage2);
      }如何“this.tabPage2”用FrmName来替代???你通过 FrmName判断,打开指定TabPage
      

  13.   

    兄弟
    你思路错误了
    不是移除再根据需要加载选项卡
    而是所有选项卡都在,只是隐藏了,然后根据需要去显示
    比如隐藏1
    那么就把选项卡1的Parent属性设置为Null
    在需要的显示的时候再把Parent属性设置回去就OK了
      

  14.   

    先不说你这样的设计思路有没有问题,先就事论事。我真是佩服你的理解能力。我知道你所有page都在,我只是让你在遍历移出的时候把所有page加到一个集合里面Dictionary<string, TabPage> pages 
    这样在取的时候就可以根据名字去找了。虽然我没有测试过,不过应该没问题。否则你就switch去找吧
      

  15.   

    13楼的老兄:这句this.tabControl_Agr.TabPages.Add(tb);错误为:值不能为 null。参数名: value
    14楼的老兄:我测试了是新增一个页面,原做好的介面不显示!
    17、18楼的兄弟能否详细的说一下了!最好能帮写一个具体的实例!
      

  16.   


    7楼的代码不行吗?上面那个pages集合你需要在初始化的时候把所有的tabPage加进去,然后就可以用名称去找了
      

  17.   

    你还没搞定啊
    不是这么悲催吧
    我说的那个方法是可行的
    我现在二十个page都没问题
      

  18.   

    能否发个源码给我呢?[email protected]