2008-10-31 6 views
4

일부 컨트롤이 포함 된 TabPage의 하위 클래스를 만들고 디자이너를 통해 해당 컨트롤의 레이아웃과 속성을 제어하려고합니다. 그러나 디자이너에서 하위 클래스를 열면 UserControl 에서처럼 하위 클래스를 배치 할 수 없습니다. UserControl 인스턴스가있는 TabPage를 만들지 않고 TabPage를 직접 디자인하고 싶습니다.UserControl처럼 편집 할 수있는 TabPage의 하위 클래스는 어떻게 만듭니 까?

어떻게하면됩니까? Designer 및 DesignerCategory 특성을 변경하려고 시도했지만 도움이되는 값을 찾지 못했습니다.

답변

9

나는 비슷한 문제가 과거에 있었어.

내가 먼저했다 UserControl을 너무

클래스 후 UserInterface처럼 tabpage을 상속 전환했다 무엇 : UserControl을 // 디자이너 비트는

클래스 후 UserInterface로 변경 마십시오 TabPage

둘째 난 그냥 넣어 내 모든 컨트롤과 물건을 usercontrol 및 도킹 탭 페이지로.

세 번째 나는 모든 usercontrol을 취하고 도킹을 자동으로 수행하는 제네릭 클래스를 만들었습니다.

개별 형태로 페이지 자체를 설계하여 I이 처리 그래서 당신은 당신의 '후 UserInterface'수업을 할 수 있고 당신이 System.Windows.Forms.TabControl

public class UserTabControl<T> : TabPage 
    where T : UserControl, new() 
{ 
    private T _userControl; 
    public T UserControl 
    { 
     get{ return _userControl;} 
     set 
     {   
      _userControl = value; 
      OnUserControlChanged(EventArgs.Empty); 
     } 
    } 
    public event EventHandler UserControlChanged; 
    protected virtual void OnUserControlChanged(EventArgs e) 
    { 
     //add user control docked to tabpage 
     this.Controls.Clear();  
     UserControl.Dock = DockStyle.Fill; 
     this.Controls.Add(UserControl); 

     if (UserControlChanged != null) 
     { 
      UserControlChanged(this, e); 
     } 
    } 

    public UserTabControl() : this("UserTabControl") 
    { 
    } 

    public UserTabControl(string text) 
     : this(new T(),text) 
    { 
    } 

    public UserTabControl(T userControl) 
     : this(userControl, userControl.Name) 
    { 
    } 

    public UserTabControl(T userControl, string tabtext) 
     : base(tabtext) 
    { 
     InitializeComponent(); 
     UserControl = userControl; 
    } 

    private void InitializeComponent() 
    { 
     this.SuspendLayout(); 
     // 
     // UserTabControl 
     // 

     this.BackColor = System.Drawing.Color.Transparent; 
     this.Padding = new System.Windows.Forms.Padding(3); 
     this.UseVisualStyleBackColor = true; 
     this.ResumeLayout(false); 
    } 
} 
+0

나를 위해 일했습니다! 수치심 아무도이 anwer을 허용했습니다. – dcg

+0

정말 중요한 부분은 TabPage에서 UserControl로 변경하는 것입니다. 어떤 이유로 Visual Studio에서 TabPage를 상속하는 경우 디자이너에 컨트롤이 표시되지 않습니다. UserControl로 변경하면 즉시 해결됩니다. 이제 도구 상자에 나타납니다. – lanoxx

+0

Genius, 모든 것을 한 번에 해결했습니다. – jkokorian

1

에 추가 할 수있는 유형을 얻을, 그런 다음 런타임에 탭 페이지 내부에서 호스팅됩니다.

어떻게 양식을 TabPage 안에 넣으시겠습니까?

form.TopLevel = false; 
form.Parent = tabPage; 
form.FormBorderStyle = FormBorderStyle.None; // otherwise you get a form with a 
              // title bar inside the tab page, 
              // which is a little odd 
+0

UserControl 사용시 개선 된 점이 없습니다. – Simon

+0

동의합니다. 양식을 사용하는 것은 과도한, 그냥 UserControl을 사용합니다. –

+0

샘플 코드는 양식을 TabPage에 표시하는 데 충분하지 않습니다. 나는 그것을 시험해 보았다. 그것은 컴파일되고 도망 갔지만, 탭 페이지는 비어 있었다. –

관련 문제