2014-07-05 3 views
1

TabPages.Name 속성 (또는 다른 방법?) (즉 .Name == "Customer")을 사용하여 특정 TabPage 객체에 대한 내 양식을 검색하고 객체를 반환해야합니다. 객체에 메서드를 전달할 수 있습니다.동적으로 TabPage 객체를 나열하고 액세스하는 방법

나는 방법이 없습니다 클래스의 어떤 종류가있다 생각하고 있어요 : 탭은 TabPages.Remove에 의해 제거

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

, 그리고 thusly 히 더 이상을 TabControl TabPages 수집하지만 연결되어가 개체가 여전히 존재합니다. TabPages.Insert를 사용하여 객체의 인스턴스 인스턴스을 컬렉션에 다시 연결하려는 경우 TabPage 객체를 전달해야합니다.

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

어떤 아이디어가 있습니까?

+0

_ 탭이 TabPages.Remove에 의해 제거되어 더 이상 TabControl의 TabControl 컬렉션에 연결되어 있지 않지만 개체가 여전히 존재합니다 ._ 어떻게 알았습니까? 더 이상 핸들이 없다면 사라져야합니다. 제거되기 전에 핸들을 작성해야합니다. – TaW

+0

좋은 질문이었고 내가 할 수 있었던 핸들에 대한 참조를 저장했습니다. – user3701568

+0

질문에 대답하려면 : "제거"후 Tabpages.IndexOfKey (myTabPage) -1을 반환합니다. 그러나 인서트는 탭을 뒤로 추가하고 모든 컨트롤 (단추, 레이블, 텍스트 상자)을 볼 수 있습니다 - 동일한 인스턴스. 직선 TabPages.Add (myTabPage)를 수행 할 때 컨트롤이 전혀 나타나지 않습니다 - 다른 인스턴스. 핸들과 이름을 배열에 저장하고 나중에 검색 할 수 있습니다. 나는 50 개가 넘는 아이템을 가지려고하고 있었고, If else statements를 피하려고했다. 깨끗하고 빠른 조회는 매끄러운 것입니다. – user3701568

답변

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); 
당신은 당신이 그들에게주는 이름을 동적으로 생성 인스턴스에 대한 참조를 유지하려면

, 당신은 사전을 사용할 수 있습니다

또는 당신은 의미가 있다면, 자신의 이름 속성을 사용할 수 있습니다 :

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 : 이러한 추가 참조를 유지하기 때문에 마지막 참조가 없어 질 때까지 페이지가 삭제되지 않고 메모리가 해제됩니다.

+0

감사합니다. 저는 C#에 익숙하지 않고 사전에 대해서 몰랐습니다. 이는 큰 도움이되며 코딩 작업을 단순화합니다. – user3701568