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;
… 그러면 TabControl
의 Selecting
이벤트를 다음과 같이 처리 할 수 있습니다 .
private void tabControl_Selecting(object sender, TabControlCancelEventArgs e)
{
e.Cancel = !((Control)e.TabPage).Enabled;
}
답변
이렇게하면 탭 페이지가 제거되지만 필요할 때 다시 추가해야합니다.
tabControl1.Controls.Remove(tabPage2);
나중에 필요할 경우 제거하기 전에 임시 탭 페이지에 저장 한 다음 필요할 때 다시 추가 할 수 있습니다.