如何动态列出和访问TabPage对象

时间:2014-07-05 20:38:22

标签: c# object tabs tabcontrol

我需要使用TabPages.Name属性(或其他方式?)(即.Name ==“Customer”)在我的Form中搜索特定的TabPage对象并返回该对象,以便将对象传递给方法。

我在想某种类有一种方法:

TabPage myTabPage = Objects.type.TabPage("Customer"); 

选项卡已被TabPages.Remove删除,因此不再连接到TabControl TabPages的集合,但对象仍然存在。我想使用TabPages.Insert将对象的 SAME实例重新连接到集合,并且必须传递TabPage对象才能执行此操作。

tabControl1.Tabpages.Insert(tabControl1.TabCount, myTabPage);

任何想法?

1 个答案:

答案 0 :(得分:2)

如果要访问已删除的对象,则需要保留对它们的引用。

如果要保留对您通过名称动态创建的实例的引用,可以使用词典:

Dictionary<string, TabPage> myPages = new Dictionary<string, TabPage>();

您可以通过以下任何方式添加它们:

myPages.Add("Joe", tabControl1.TabPages[0]);
myPages.Add("Jill", tabControl1.TabPages["tabPage2"]);
myPages.Add("Jack", tabPage3);

或者你可以使用他们的Name属性,如果它有意义:

myPages.Add(tabPage1.Name, tabPage1);

稍后访问它们:

tabControl1.TabPages.Add(myPages["Jill"]);

只需确保字典键是唯一的。这将导致运行时错误:

myPages.Add(tabPage1.Name, tabPage1);
tabControl1.TabPages.Remove(tabPage1);
tabControl1.TabPages.Add(new TabPage());
myPages.Add(tabPage1.Name, tabPage1);

因为默认名称已在字典中。您可以使用Contains方法检查Keys和Values:

if (!myPages.Keys.Contains(tabPage1.Name)) myPages.Add(tabPage1.Name, tabPage1);
if (!myPages.Values.Contains(tabPage1)) myPages.Add(tabPage1.Name, tabPage1);

通用集合,尤其是Dictionary<T,T> 精彩 ..

警告1:使用其他密钥,您仍然可以添加相同的实例两次。

警告2:由于您保留了这些额外的引用,因此在最后一次引用消失之前,不会销毁页面并释放其内存。