4

いくつかのコントロールを含む TabPage のサブクラスを作成し、それらのコントロールのレイアウトとプロパティをデザイナーで制御したいと考えています。ただし、デザイナーでサブクラスを開くと、UserControl のように配置できません。UserControl インスタンスを含む TabPage を作成する必要はありません。TabPage を直接設計したいと考えています。

それ、どうやったら出来るの?Designer および DesignerCategory 属性を変更しようとしましたが、役立つ値が見つかりませんでした。

4

2 に答える 2

9

私は過去に同様の問題を抱えていました。

私が最初にしたことは、Usercontrolの継承からそのようなタブページに切り替えることでした

class UserInterface:UserControl //デザイナービットを実行してから、次のように変更します

クラスUserInterface:TabPage

次に、すべてのコントロールなどをユーザーコントロールに配置し、それをタブページにドッキングします。

3番目に、任意のユーザー制御を受け取り、ドッキングを自動的に行うジェネリッククラスを作成しました。

したがって、「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);
    }
}
于 2008-10-31T16:58:23.087 に答える
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
于 2008-10-31T19:32:06.473 に答える