2017-11-14 1 views
0

사용자가 선택하는 옵션에 따라 탭 컨트롤에서 탭을 동적으로 변경하려고합니다. 여기의 예를 따랐다TabControl에 탭이 있는지 확인하십시오. C#

TabControl.TabPageCollection.Contains Method (TabPage)

다음과 같이 내 코드는;

private TabPage VulnTab; 

VulnTab = new TabPage("Vulnerability"); 
if (tabControl1.TabPages.Contains(VulnTab) == true) 
{ 
    tabControl1.SelectedTab = VulnTab; 
} 
else 
{ 
    tabControl1.TabPages.Add(VulnTab); 

    tabControl1.SelectedTab = VulnTab; 
    var vuln = new vulnerability(); 
    tabControl1.SelectedTab.Controls.Add(vuln); 
} 

버튼 클릭시 발동됩니다.

첫 번째 실행시 VulnTab이 없으므로 VulnTab이 성공적으로 생성됩니다. 그러나 버튼을 다시 클릭하면 새로운 버튼이 다시 생성됩니다.

두 번째 버튼을 클릭하면 탭 페이지가 이미 존재한다는 것을 알기를 원합니다.

어떻게하면됩니까?

+1

'== true'에는 요점이 없습니다. – SLaks

답변

2

문제는 매번 완전히 새로운 페이지를 만들고 있다는 것입니다. 어떤 방법의 액션을 발사 물론 ButtonClicked

private TabPage VulnTab; 

private void ButtonClicked(object sender, EventArgs args) 
{ 
    if (VulnTab != null) 
    { 
     tabControl1.SelectedTab = VulnTab; 
    } 
    else 
    { 
     VulnTab = new TabPage("Vulnerability"); 
     tabControl1.TabPages.Add(VulnTab); 

     tabControl1.SelectedTab = VulnTab; 
     var vuln = new vulnerability(); 
     tabControl1.SelectedTab.Controls.Add(vuln); 
    } 
} 

단지입니다 : (? 양식)는 개인 TabPage 객체를 정의하는대로 아래의 예처럼, 널 (null)의 경우, 당신은 클래스에 범위를 이동하고 확인할 수 있습니다 탭 생성 및/또는 변경.

나중에 참조 할 수 있도록 : 새 개체를 만드는 경우 (키워드 new을 사용하여) 완전히 새로운 개체를 만듭니다. 그들은 동일 할 수도 있지만, 똑같은 모양의 두 사과가 같은 사과가 아니어도 똑같은 것은 아닙니다. 몇 가지 특정 조건 (개체가 단순한 형식 (숫자, DateTime)이거나 IEquatable이 구현 된 경우)에서만 두 개의 별도 위치에 만들어진 두 개체가 .NET과 같을 수 있습니다.

+0

이것은 효과가 있으며 나는 그것이 매우 분노했다. –

+0

@AdrianBrown 제발 당신의 코드에 무슨 문제가 있었는지 더 깊은 설명과 함께 제 대답의 편집을 한번보세요. 그래서 당신은 미래에 그러한 문제를 피할 수 있습니다. 또한 내 대답이 귀하의 문제를 해결 한 경우 해결 문제로 표시하십시오,이 많은 도움이됩니다.) –

+1

세부 사항에 대해 많은 감사드립니다. 답변으로 표시 (미안해, 나는 타이머를 기다려야했다!) –

1
VulnTab = new TabPage("Vulnerability"); 
if (tabControl1.TabPages.Contains(VulnTab) == true) 

방금 ​​새로 만든 TabPage을 만들었습니다. 분명히 그것은 TabPages에 없습니다.

기존 인스턴스를 한 번만 만들어서 확인해야합니다.

+0

죄송합니다 - 탭이있는 경우 비어있는 TabControl 테스트 (if (tabControl1.TabPages.Contains (VulnTab) == true)) - 탭을 생성하여 TabPages 컬렉션에 추가합니다. TabPages를 다시 검사 할 때 반드시 현재 있는지 확인해야합니다. –

+0

그러나 _ 다른 인스턴스에 대해 다시 확인하고 있습니다. – SLaks

+0

나는 지금 당신을 이해한다 - @Dominik Szymański가 이것 또한 지적했다. 나는 해결책을 가지고있다. –

관련 문제