0

既存の Tabcontrol クラスの設計が気に入らないため、UserControl から派生した独自の Tabcontrol クラスを作成しました。正常に動作しますが、デザイン時のサポートをコントロールに追加したいのですが、開始方法がわかりません。いくつかのチュートリアルを読みましたが、Tabcontrol の作成方法を説明しているものはありません。手伝ってくれてありがとう ;)

編集:

public class TabListDesigner : ParentControlDesigner
{
    private DesignerVerb addVerb;
    private DesignerVerb removeVerb;
    private DesignerVerbCollection verbs;

    protected TabList TabListControl { get { return this.Control as TabList; } }

    public override DesignerVerbCollection Verbs
    {
        get
        {
            if (verbs == null)
            {
                verbs = new DesignerVerbCollection();

                addVerb = new DesignerVerb("Add TabListPage", this.AddVerbHandler) { Description = "Add a new TabListPage to the parent control." };
                removeVerb = new DesignerVerb("Remove TabListPage", this.RemoveVerbHandler) { Description = "Remove the currently selected TabListPage from the parent control." };

                verbs.Add(addVerb);
                verbs.Add(removeVerb);
            }

            return verbs;
        }
    }

    private void AddVerbHandler(object sender, EventArgs e)
    {
        this.TabListControl.Add();
    }

    private void RemoveVerbHandler(object sender, EventArgs e)
    {
        //this.RemoveSelectedTabListPage();
    }

    public override void InitializeNewComponent(IDictionary defaultValues)
    {
        base.InitializeNewComponent(defaultValues);
        this.TabListControl.Add();
        this.TabListControl.Add();
    }
}

これは私がやったことですが、うまくいきません。TabListControl.Add() メソッドが機能します (実行時にテストしましたが、デザイン時のサポートが必要です)

私ができるようにしたい: - コントロールは、デザインタイムに 2 つの TabPages で初期化する必要があります - デザインタイムに TabPages を追加/削除します - デザインタイムに TabPages を切り替えます - デザインタイムに異なる TabPages にコントロールを追加します

4

1 に答える 1

1

理論的には、Visual Studio でコントロールをレンダリングする場合、多くのことを行う必要はありません。カスタム UserControl の実装が実行され、Visual Studio がデザイン サーフェイスにコントロールを描画します。等

一つ気をつけたいのはthis.DesignMode資産です。コントロールが Visual Studio でレンダリングされる場合、DesignMode は true になるため、必要に応じてカスタム コードを実行できます (または一部のコードを実行しません。これがif (!this.DesignMode) { }、WinForms プロジェクトで WebService 呼び出しがブロックにラップされていることがよくある理由です)。

より多くのアドバイスを提供するには、あなたからの詳細が必要です-正確に何をしようとしているのか (デザイナーでカスタム機能が必要ですか)、使用している Visual Studio のバージョン.

編集: OK、私は問題をさらに調べました - マウスイベントは「設計上」トラップされているため、マウスイベントを操作したい場合は楽しい時間にいるようです。このリンクをチェックしてください: http://social.msdn. microsoft.com/Forums/en-US/winforms/thread/81606909-9310-48e8-8b46-5ecafb6e8007

そのため、Load などのイベントで何らかのロジックを使用している場合でも、カスタム コントロールを更新するのに問題はありませんが、より高度なもの (デザイナー内の相互作用) については、より深く掘り下げる必要があります。たとえば、この記事を見てください(リンク元: WinForm コントロールの元のイベント動作を削除する)

于 2013-03-14T08:15:50.067 に答える