2012-04-03 2 views
0

WinForms TabControl의 선택 해제 이벤트에서 탭 변경을 처리하고 있습니다. 그러나 어떤 경우에는 내가 전환하기 전에 클릭 한 탭을 삭제합니다. 이하려고 있기 때문에TabControl의 선택 이벤트를 취소하는 방법

시나리오는

현재 내가 탭 2 탭을 클릭 탭 1 에있어 내가 탭 1과 탭 2 이 1 선택 해제 이벤트 충돌의 OnPaint에서 탭 컬렉션에서 탭 2를 제거 더 이상 존재하지 않는 탭으로 이동하십시오. (ArgumentOutOfRangeException). 그것은 선택 이벤트를 치기 전에 충돌합니다.

내가 더 이상 존재하지 않는 탭만 취소하기 때문에 선택 취소시 탭 카운트가 변경되었는지 확인하고 싶지 않습니다.

도움을 주시면 감사하겠습니다.

private void TabControl_Deselecting(object sender, TabControlCancelEventArgs) { 
     DoSomeWork(); 
    } 

내가 클릭 한 탭을 DoSomeWork가 삭제한다고 가정합니다. 이동하려는 탭을 삭제했는지 어떻게 알 수 있습니까? 내 마음에 제공 가능한 솔루션의

+0

질문을 조금 더 명확히하고 원하는 결과가 무엇인지 물어보십시오. 여기서 원하는 것을 이해하는 데 어려움이 있습니다. – ImGreg

+0

사용자 인터페이스를 재고해야합니다. 그것은 너무 혼란스럽고 사용하기가 어려워 보입니다. – BoltBait

+0

탭 제거는 3 또는 4 개의 함수가 깊습니다. 비즈니스 객체에 대한 컨트롤을 '바인딩'하고 모든 로직을 비즈니스 객체에 넣고 있습니까? 이 GUI가 작동하는 방식은 실제로 직관적이지 못합니다. –

답변

1

아니요. 시나리오가 이상하지만 나는 그것을 추락시킬 수 없습니다. 선택 취소를 취소하십시오.

private void tabControl1_Deselecting(object sender, TabControlCancelEventArgs e) { 
     if (e.TabPageIndex == 0 && tabControl1.TabCount > 1) { 
      tabControl1.TabPages[1].Dispose(); 
      e.Cancel = true; 
     } 
    } 
+0

내가 어떻게 e.cancel을 true로 설정할지 선택 해제 할 수 있는지 알아 봅시다. 그 문제를 해결할 것입니다. – fbhdev

+0

문제는 탭 제거가 코드에서 3 또는 4 개의 기능이 있음을 나타냅니다. – fbhdev

+1

무엇을하고 있더라도 여기에서 완전히 보이지 않습니다. 잘못하고 있습니다. 질문을 잘 문서화해야하며 문제를 재현하는 스 니펫이 필요합니다. –

0

하나 :

당신이 Tab1 선택 해제 이벤트가 Tab2 선택 이벤트 전에 제기해야하는 경우

, 내가 내 사용자 지정 탭 컨트롤을 선언하고 그것을 대체 할을 시도 할 것처럼, OnPaintMethod입니다 이 의사 :

public class MyCustomTab : TabItem 
{ 
    ... 


    protected override OnPaint(....) 
    { 
     if(this.Parent == null) return; 

     base.Paint(...); 
    }  
} 

지우기 당신의 TabControl 해당 유형의 TabItems을 추가해야합니다.

관련 문제