我需要使用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);
任何想法?
答案 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:由于您保留了这些额外的引用,因此在最后一次引用消失之前,不会销毁页面并释放其内存。