[c#] TabControl 내에서 탭을 비활성화하려면 어떻게해야합니까?

TabControl 에서 탭을 비활성화하는 방법이 있습니까?



답변

TabPage의 클래스는 Enabled 속성을 숨 깁니다. 어색한 UI 디자인 문제가 있기 때문에 의도적이었습니다. 기본적인 문제는 페이지를 비활성화해도 탭도 비활성화되지 않는다는 것입니다. 그리고 Selecting 이벤트로 탭을 비활성화하여이 문제를 해결하려고하면 TabControl에 페이지가 하나만있을 때 작동하지 않습니다.

이러한 사용성 문제가 문제가되지 않는 경우 속성이 여전히 작동하고 IntelliSense에서 숨겨져 있다는 점을 명심하십시오. FUD가 불편하다면 다음과 같이하면됩니다.

public static void EnableTab(TabPage page, bool enable) {
    foreach (Control ctl in page.Controls) ctl.Enabled = enable;
}


답변

TabPage를 컨트롤로 캐스팅 한 다음 Enabled 속성을 false로 설정합니다.

((Control)this.tabPage).Enabled = false;

따라서 탭 페이지의 헤더는 계속 활성화되지만 그 내용은 비활성화됩니다.


답변

다음을 간단히 사용할 수 있습니다.

tabPage.Enabled = false;

이 속성은 표시되지 않지만 문제없이 작동합니다.

TabControler편집 불가능한 탭으로 변경할 수 없도록 선택 이벤트를 프로그래밍 할 수 있습니다 .

private void tabControler_Selecting(object sender, TabControlCancelEventArgs e)
{
    if (e.TabPageIndex < 0) return;
    e.Cancel = !e.TabPage.Enabled;
}


답변

“선택”이벤트를 등록하고 탭 페이지 탐색을 취소 할 수 있습니다.

private void tabControl1_Selecting(object sender, TabControlCancelEventArgs e)
{
    if (e.TabPage == tabPage2)
        e.Cancel = true;
}

또 다른 아이디어는 모든 컨트롤을 패널 컨트롤의 탭 페이지에 놓고 패널을 비활성화하는 것입니다! 스마일리

tabControl1.TabPages 컬렉션에서 탭 페이지를 제거 할 수도 있습니다. 그것은 탭 페이지를 숨길 것입니다.

크레딧은 littleguru @ Channel 9 로 이동합니다 .


답변

아마도 탭 컨트롤에서 탭을보고 싶지만 “비활성화”(즉, 회색 및 선택 불가능)를 원할 것입니다. 이에 대한 기본 지원은 없지만 원하는 효과를 제공하기 위해 그리기 메커니즘을 재정의 할 수 있습니다.

이를 수행하는 방법의 예가 여기제공됩니다 .

마법은 제시된 소스의이 스 니펫과 DisableTab_DrawItem 메서드에 있습니다.

this.tabControl1.DrawMode = TabDrawMode.OwnerDrawFixed;
this.tabControl1.DrawItem += new DrawItemEventHandler( DisableTab_DrawItem );


답변

Cédric Guillemette 대답을 확장하면 다음을 비활성화합니다 Control.

((Control)this.tabPage).Enabled = false;

… 그러면 TabControlSelecting이벤트를 다음과 같이 처리 할 수 ​​있습니다 .

private void tabControl_Selecting(object sender, TabControlCancelEventArgs e)
{
    e.Cancel = !((Control)e.TabPage).Enabled;
}


답변

이렇게하면 탭 페이지가 제거되지만 필요할 때 다시 추가해야합니다.

tabControl1.Controls.Remove(tabPage2);

나중에 필요할 경우 제거하기 전에 임시 탭 페이지에 저장 한 다음 필요할 때 다시 추가 할 수 있습니다.