답변

2

최근 프로젝트에서 this Wizard 코드를 사용했는데 제대로 작동했습니다.

기본 경험을 제공합니다. 내가 내 UI 내에서 동일한 공간에 여러 개의 패널을 갖고 싶어 경우이 때

17

뭘 설명하는 마법사, 당신은 그러나 Eric J.

의 접근 방식을 조사 할 수 있습니다, 나는 전환하려면 디자이너 사이에서 TabControl을 사용하고 TabControl에서 탭을 숨길 때가 있습니다. 이렇게하면 디자인 타임에 UI를 더 쉽게 관리 할 수 ​​있으며 코드는 런타임에 탭 사이를 전환하는 것이 매우 간단합니다.

매우 간단한 HiddenTabsControl이라는 TabControl에서 파생 된 사용자 지정 컨트롤을 만들었습니다. 이 클래스는 WndProc만을 재정의하고 TabControl 기본 클래스는 다른 모든 것을 처리 할 수 ​​있습니다. 당신이 할 필요가있다 :

  • 사용자 지정 컨트롤을 선택하여 프로젝트에 새 항목을 추가, HiddenTabsControl 같은
  • 이름이 뭔가.
  • 기본 클래스를 TabControl로 변경하고 Visual Studio에서 추가 한 생성자 및 OnPaint 재정의를 제거하십시오.
  • 복사 클래스로의 WndProc이 재정의 :

protected override void WndProc(ref Message m) 
{ 
    // Hide tabs by trapping the TCM_ADJUSTRECT message 
    if (m.Msg == 0x1328 && !DesignMode) 
    { 
     m.Result = (IntPtr)1; 
    } 
    else 
    { 
     base.WndProc(ref m); 
    } 
} 
지금 당신은 디자이너에서 탭을 변경할 수 있습니다 쉽게 UI를 디자인하고 코드에서 당신은 필요에 따라 탭을 변경하는 이벤트를 처리 할 수 ​​있습니다. 컨트롤이 구축 될 때 탭이 점유하는 공간의 탭을 제거

this.hiddenTabsControl.SelectedTab = this.tabPageYouWantVisible; 

한 부작용 : 선택된 탭을 변경하는 것은 쉽게 이루어집니다. 이를 제거하면 HiddenTabsControl이 차지하는 공간이 축소되어 공간이 변경됩니다. 일반적으로 HiddenTabsControl의 앵커를 줄이면 축소되지 않게됩니다.

+0

+1. 멋진 간단한 솔루션입니다. 그래도 키보드로 탭을 전환 할 수는 있지만 (Ctrl + Tab은 올바르게 작동하고 포커스를 오른쪽으로 가져 가면 화살표 키). – Joey

+1

또한 MultiLine 속성을 항상 'true'로 설정하려고합니다. 그렇지 않으면 탭 막대를 스크롤하는 화살표가 나타납니다 (클릭 할 수는 없지만). – Joey

+0

이 방법은 Mono와 호환되지 않습니다. – Luca

2

덜 우아하지만 빠른 해킹 방식은 런타임까지 상위 폼에 패널을 추가하지 않는 것입니다. 이를 수행 할 때 디자이너는 컴파일 전에 패널이 어디에 속해 있는지 알지 못하기 때문에 표시되지 않습니다.

예를 들어

, 당신이 부모 폼에 컨트롤을 추가 코드 블록 찾을 :

   //this->Controls->Add(this->panel_X); 
     this->Controls->Add(this->tabControl); 
     this->Controls->Add(this->menuStrip_topMenu); 

설명하거나 문을 제거를, 다음 양식이로드 될 때 발생하는 이벤트에 대한 핸들을 찾을 :

 this->Load += gcnew System::EventHandler(this, &MainForm::MainForm_Load); 

그런 다음 이벤트 핸들러의 정의, 폼에 컨트롤을 추가 :

System::Void MainForm_Load(System::Object^ sender, System::EventArgs^ e) { 
... 
... 
this->Controls->Add(this->panel_X); 
} 

나는이 일을함으로써 원치 않는 부작용을 경험하지는 못했지만, 누군가 그럴만 한 이유가 없다면 듣고 싶어 할 것입니다.

관련 문제