Как мне создать подкласс TabPage, который я могу редактировать как UserControl? - PullRequest
4 голосов
/ 31 октября 2008

Я хочу создать подкласс TabPage, который содержит некоторый элемент управления, и я хочу управлять макетом и свойствами этих элементов управления через дизайнер. Однако, если я открою свой подкласс в конструкторе, я не смогу расположить их так, как я мог бы в UserControl. Я не хочу создавать TabPage с экземпляром UserControl, я хочу создать TabPage напрямую.

Как мне это сделать? Я пытался изменить атрибуты Designer и DesignerCategory, но я не нашел значений, которые могут помочь.

Ответы [ 2 ]

9 голосов
/ 31 октября 2008

В прошлом у меня была похожая проблема.

Сначала я переключился с наследования Usercontrol на вкладку, как показано ниже.

class UserInterface: UserControl // Сделайте дизайнерский бит, затем измените его на

Класс UserInterface: TabPage

Во-вторых, я просто поместил все свои элементы управления и прочее в пользовательский контроль и закрепил это на вкладке.

в-третьих, я создал общий класс, который принимает любой пользовательский контроль и выполняет стыковку автоматически.

чтобы вы могли взять свой класс 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);
    }
}
1 голос
/ 31 октября 2008

Я справляюсь с этим, проектируя сами страницы как отдельные формы, которые затем размещаются на закладках во время выполнения.

Как поместить форму внутри 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...