삭제 된 개체에 액세스하려면 해당 개체에 대한 참조를 유지해야합니다.
Dictionary<string, TabPage> myPages = new Dictionary<string, TabPage>();
당신은 이러한 방법으로 추가 할 수 있습니다 :
myPages.Add("Joe", tabControl1.TabPages[0]);
myPages.Add("Jill", tabControl1.TabPages["tabPage2"]);
myPages.Add("Jack", tabPage3);
당신은 당신이 그들에게주는 이름을 동적으로 생성 인스턴스에 대한 참조를 유지하려면
, 당신은 사전을 사용할 수 있습니다
또는 당신은 의미가 있다면, 자신의 이름 속성을 사용할 수 있습니다 :
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);
).
1 경고 ..
if (!myPages.Keys.Contains(tabPage1.Name)) myPages.Add(tabPage1.Name, tabPage1);
if (!myPages.Values.Contains(tabPage1)) myPages.Add(tabPage1.Name, tabPage1);
일반 컬렉션 특히 Dictionary<T,T>
이 멋진은 다음과 같습니다 : 다른 키는 여전히를 추가 할 수 있습니다 사용 당신은이 모두 키와 값을 확인하는 방법을 포함 사용할 수 있습니다 같은 인스턴스를 두 번.
경고 2 : 이러한 추가 참조를 유지하기 때문에 마지막 참조가 없어 질 때까지 페이지가 삭제되지 않고 메모리가 해제됩니다.
출처
2014-07-06 03:19:18
TaW
_ 탭이 TabPages.Remove에 의해 제거되어 더 이상 TabControl의 TabControl 컬렉션에 연결되어 있지 않지만 개체가 여전히 존재합니다 ._ 어떻게 알았습니까? 더 이상 핸들이 없다면 사라져야합니다. 제거되기 전에 핸들을 작성해야합니다. – TaW
좋은 질문이었고 내가 할 수 있었던 핸들에 대한 참조를 저장했습니다. – user3701568
질문에 대답하려면 : "제거"후 Tabpages.IndexOfKey (myTabPage) -1을 반환합니다. 그러나 인서트는 탭을 뒤로 추가하고 모든 컨트롤 (단추, 레이블, 텍스트 상자)을 볼 수 있습니다 - 동일한 인스턴스. 직선 TabPages.Add (myTabPage)를 수행 할 때 컨트롤이 전혀 나타나지 않습니다 - 다른 인스턴스. 핸들과 이름을 배열에 저장하고 나중에 검색 할 수 있습니다. 나는 50 개가 넘는 아이템을 가지려고하고 있었고, If else statements를 피하려고했다. 깨끗하고 빠른 조회는 매끄러운 것입니다. – user3701568