2011-06-29 25 views
1

私は自分のウィザードインターフェイスを作り始めました。私はウィザードの各ステップでGroupBoxを使用しますが、すべてのステップ(すべてのGroupBox)は同じ構造とスタイルを持つ必要があるため、カスタムコントロールを使用することに決めました。その開発者がデザイナーを使用して、その中に希望のコントロールを置くことができます他のコントロールを含むカスタムGroupBoxコントロール

  • A FlowLayoutPanel:

    今、私はこれらの要素を持つカスタムグループボックスを必要としています。 (ユーザーがユーザー名とパスワードを入力できるように、2つのTextBoxコントロールなど)。

  • ステップを記述するFlowLayoutPanelのラベル。

  • A戻るボタン。 。ユーザーがカスタムボタンを置くことができることを

ここ

  • 別FlowLayoutPanelはプレビューです:

    Preview of what the custom GroupBox should look like.

    問題#1

    私は、新しいユーザーコントロールを作成するとし、それがGroupBoxを継承するようにすると、GroupBoxを取得して配置することはできません。私はデザイナーで見るすべては、このメッセージである:私はそれが望んでいたように私はそれがグループボックスを継承させることができなかったので、私は中のGroupBoxを置くことによって、それを

    The error.

    問題#2

    をやってみましたカスタムUserControl。これをやった後、開発者がデザイナを使ってコントロールを追加できるように、私はFlowLayoutPanelsでEnableDesignModeを使用しなければなりませんでした。問題は、それらが移動可能でサイズ変更可能になったことです(私はこれを望んでおらず、それらは適切に固定されており、サイズ変更もサイズ変更もしないでください)。オブジェクト。 "醜いそれを作るされている:

    Movers and resizers on the FlowLayoutPanels.

    問題#3

    は私がメインFlowLayoutPanelの要素を中心にしたいです。これを行うには、コントロール(記述ラベル)を配置し、FlowLayoutPanelの幅にリサイズして、コントロールを中央に配置する必要がありました。 (PanelLayoutPanelでこれを行うのは簡単ですが、そのセルは1つの要素しか保持できません。パネルを追加してセルに要素を追加することはできますが、センタリングを失うことになります)。問題は、私が追加するすべてのコントロールのためのアンカーからアンカー。追加されたコントロールのアンカーをNoneに自動的に設定するために、何か(OnDesignerControlAdded ???など)をフックできますか?

    Control positions with different Anchor values.

    あなたの答えのすべては、私は、オープンソースプロジェクトMagician on GitHubとそれを搭載し、他の多くのオープンソースプロジェクトの構築を支援します。すべての努力に感謝します。問題#1の

  • +0

    を適用するあなたは答えを見つけますか?そうでなければ、私は(少なくとも問題#1で)助けることができるかもしれません。 –

    +0

    @Charlesいいえ、私はしていません。 – AlicanC

    答えて

    3

    クイック答え:

    は、フォームまたはUserControl(それは問題ではない)の上に、あなたのグループボックス(GroupBox1)を設計します。

    designer.csファイルのInitializeComponent()に移動し、groupboxおよびその子コントロールに関連するすべてのコードをコピーします。

    CustomGroupBoxという新しいカスタムコントロールをプロジェクトに追加します。それはグループボックスから継承する

    変更:

    public partial class CustomGroupBox : GroupBox 
    

    がCustomGroupBoxのコンストラクタにすべてコピーしたコードを貼り付けます(またはあなたがのInitializeComponent()の後に、コンストラクタから呼び出す新しい方法、に、あなたがしたい場合はきちんとしたこと)。

    貼り付けられたコードからすべての出現をthis.から削除します。すべての発生をGroupBox1に置き換えてthisに置き換えます。

    開発者がアクセスできる任意の子コントロールに対して、そのコントロールのパブリックプロパティを追加します。

    など。

    public FlowLayoutPanel FLP 
        { 
         get { return flowLayoutPanel1; } 
        } 
    

    そしてもちろんの

    public class CustomGroupBoxDesigner : ControlDesigner 
        { 
         public override void Initialize(IComponent component) 
         { 
          base.Initialize(component); 
          var c = component as CustomGroupBox; 
          EnableDesignMode(c.FLP, "FLP"); 
         } 
        } 
    

    あなたCustomDesignerを追加し、属性

    [Designer(typeof(CustomGroupBoxDesigner))] 
    public partial class CustomGroupBox : GroupBox 
    
    +0

    'FlowLayoutPanel'ではなく' GroupBox'でこれを試しましたが、 'EnableDesignMode(c.GB、" GB ");'という行をフォームに追加すると、カスタムコントロールは "locked"サイズ変更もできません)。それを引き起こす原因は何ですか? – user5226582

    関連する問題