2009-06-17 10 views
2

ラベルと進行状況バーを含むユーザーコントロールを作成しました。フロー方向が上から下に設定されたフローレイアウトパネルのみを含む別のユーザーコントロールも作成しました。前者を後者のフローレイアウトパネルに追加するときは、利用可能な水平スペースの最大量と、ラベルと進行状況バーのデフォルトの高さが適用されるような最小垂直スペースの量を使用したいと思います。これを行う方法はありますか?コンテナを塗りつぶすユーザーコントロールを取得する

問題の説明に役立つようにscreenshotをアップロードしました。ラベルと進行状況バーを含むユーザーコントロールは赤色で、フローレイアウトパネルを含むユーザーコントロールは緑色です。

+0

FlowDirectionをTopDownに設定したFlowLayoutPanelにコントロールを追加すると、Dockプロパティが "Top"に設定されているか、またはAnchorプロパティが "AnchorStyles.Left |"に設定されていると、 AnchorStyles.Right " –

答えて

2

ちょうど

UserControl.Dock = System.Windows.Forms.DockStyle.Top; 
+0

ユーザーコントロールのコンストラクタでDockプロパティをTopに設定すると、非表示になります。緑のフローレイアウトパネルが表示されます。 –

1

ポジショニング...「トップ」へのユーザーコントロールのDockプロパティを設定するとコントロールのレイヤーは倍に注意が必要です。緑のフローコントロールのDockプロパティがFillに設定されていることを確認します。その後、ラベルコントロールを配置して位置決めを開始します。必要に応じてDockプロパティをTopに設定することができますが、ほとんどの場合、私はそれを大切にしていません。コントロールの位置を設定する際に覚えておくべき最も重要なことの1つ、特にDockプロパティを使用しているときは、その順序が重要です。コントロールが見えない場合(つまり、他のコントロールの背後に隠れているように見えます)、親に追加する方法を並べ替えてみてください(この場合はフローコントロールパネル)。 VSでデザイナを使用している場合は、右クリックして[トップ/ボトムに送る]コマンドを使用してこれを行うことができます(Dockプロパティを使用する場合は非常に便利です。 )。

また、よく見落とされるオプションは、Control.Anchorの適切な使用です。私はそれを見ることをお勧めします。

4

実際にコントロールを「フロー」にする必要はないので、ホストコントロールの一番上の位置を消費してほしいという問題があると思います。代わりに、通常のPanelコントロールを使用するだけで、必要な結果を得ることができます。コンテナコントロールのControlsコレクションに子ユーザーコントロールを追加し、その後、追加されたユーザーコントロールのDockを "Top"に設定するだけです。

 ChildDisplay dsp1 = new ChildDisplay(); 
     pnlHost.Controls.Add(dsp1); 
     dsp1.Dock = DockStyle.Top; 

     ChildDisplay dsp2 = new ChildDisplay(); 
     pnlHost.Controls.Add(dsp2); 
     dsp2.Dock = DockStyle.Top; 

     ChildDisplay dsp3 = new ChildDisplay(); 
     pnlHost.Controls.Add(dsp3); 
     dsp3.Dock = DockStyle.Top; 

注:[ChildDisplay]は、使用しているUserControlの名前で置き換えてください。

関連する問題