如何字符串转为控件的名称?请高手支招!

whh764224646 2012-09-22 10:28:55
如题!
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来表示?
...全文
398 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
whh764224646 2012-09-29
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 的回复:]
你还没搞定啊
不是这么悲催吧
我说的那个方法是可行的
我现在二十个page都没问题
[/Quote]
能否发个源码给我呢?191971159@qq.com
zypine 2012-09-26
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 的回复:]
有朋友帮看看吗?
[/Quote]

7楼的代码不行吗?上面那个pages集合你需要在初始化的时候把所有的tabPage加进去,然后就可以用名称去找了
瑞卡哥哥 2012-09-26
  • 打赏
  • 举报
回复
可以用findControl("tab1")
whh764224646 2012-09-26
  • 打赏
  • 举报
回复
有朋友帮看看吗?
缭绕飘渺 2012-09-26
  • 打赏
  • 举报
回复
你还没搞定啊
不是这么悲催吧
我说的那个方法是可行的
我现在二十个page都没问题
whh764224646 2012-09-25
  • 打赏
  • 举报
回复
13楼的老兄:这句this.tabControl_Agr.TabPages.Add(tb);错误为:值不能为 null。参数名: value
14楼的老兄:我测试了是新增一个页面,原做好的介面不显示!
17、18楼的兄弟能否详细的说一下了!最好能帮写一个具体的实例!
zypine 2012-09-25
  • 打赏
  • 举报
回复
先不说你这样的设计思路有没有问题,先就事论事。我真是佩服你的理解能力。我知道你所有page都在,我只是让你在遍历移出的时候把所有page加到一个集合里面Dictionary<string, TabPage> pages
这样在取的时候就可以根据名字去找了。虽然我没有测试过,不过应该没问题。否则你就switch去找吧
缭绕飘渺 2012-09-24
  • 打赏
  • 举报
回复
兄弟
你思路错误了
不是移除再根据需要加载选项卡
而是所有选项卡都在,只是隐藏了,然后根据需要去显示
比如隐藏1
那么就把选项卡1的Parent属性设置为Null
在需要的显示的时候再把Parent属性设置回去就OK了
wxmayifei 2012-09-24
  • 打赏
  • 举报
回复
你可以把字符串的名称想象成类的名称就行了
ling_100200 2012-09-24
  • 打赏
  • 举报
回复
public void Show_Form(string FrmName)
{
this.tabControl_Agr.TabPages.Add(this.tabPage2);
}

如何“this.tabPage2”用FrmName来替代???

你通过 FrmName判断,打开指定TabPage
  • 打赏
  • 举报
回复
TabPage page =new TabPage ();
page.name=FrmName;
this.tabControl_Agr.TabPages.Add(page );
熙风 2012-09-24
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]

感谢huang_u、zypine!但我还是没能解决问题,我还是详细的说过想要的过程!
我在tabControl1中有name为tabPage1、tabPage2、tabPage3、tabPage4在窗口加载时,通编历将这些移除。现在想做的是通过“FrmName”传递来的字符串有tabPage1、tabPage2、tabPage3、tabPage4,如何通传过来的字符串来加载被移除的选项卡?
……
[/Quote]

上面不是有么?



public void Show_Form(string FrmName)
{
TabPage tb=tabControl1.TabPages["FrmName"];
this.tabControl_Agr.TabPages.Add(tb);
}

whh764224646 2012-09-24
  • 打赏
  • 举报
回复
感谢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”这个选项卡里面是有内容的!

前辈如有指点,请写出完整代码,非常感谢!
whh764224646 2012-09-23
  • 打赏
  • 举报
回复

public void Show_Form(string FrmName)
{
this.tabControl_Agr.TabPages.Add(this.合同分类);
}

如何“this.合同分类”用FrmName来替代???
“this.合同分类”这个选项卡里面是有内容的!
whh764224646 2012-09-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

你这代码真是只为了实现功能。。。。。

//存放所有需要的Page
Dictionary<string, TabPage> pages = new Dictionary<string, TabPage>();

。。。
。。。

TabPage page = tabControl_Agr.TabPages["Name"];
if (page!=null)
{
tabC……
[/Quote]
不行啊,老兄弟!能否加你QQ呢?我的QQ:191971159
zypine 2012-09-23
  • 打赏
  • 举报
回复
把需要的page放到pages集合里面,就可以根据名称去找了
huang_u 2012-09-23
  • 打赏
  • 举报
回复
tabControl1.TabPages.Add(tabPage2);
tabPage2是tabcontrol中集合中的(name)
zypine 2012-09-23
  • 打赏
  • 举报
回复
你这代码真是只为了实现功能。。。。。

//存放所有需要的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;
}

}
whh764224646 2012-09-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

和反射有关系么?
C# code
this.tabControl1.TabPages.Add(FrmName, FrmName);//增加
this.tabControl1.SelectedTab = this.tabControl1.TabPages[FrmName];//激活
[/Quote]
谢谢!但我有一个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

  • 打赏
  • 举报
回复
和反射有关系么?
this.tabControl1.TabPages.Add(FrmName, FrmName);//增加
this.tabControl1.SelectedTab = this.tabControl1.TabPages[FrmName];//激活
加载更多回复(3)

110,825

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧