1

FlowLayoutPanel で本当に苦労しています。

私は1つの子コントロールを持つFLP(FlowLayoutPanel)を持つWinformsアプリを持っています - tabControl(その中にwebBrowserを持つ)。フォームには、上部にドッキングされた TableLayoutPanel と、下部にドッキングされた別の TableLayoutPanel もあります。したがって、私の意図は、これらの TLP の間のスペースを FlowLayoutPanel で埋めることです。すべてのコントロールがデザイン ビューでフォームに追加されます。

必要なもの - フォームのサイズを変更すると、FLP のサイズもそれに合わせて適切に変更され、フォームが埋められ、tabControl も FLP を埋める必要があります。

フォームは最大化して実行するように設定されているため、アプリを実行すると最初のサイズ変更がデフォルトで行われます。その時点で、FLP とそのコントロールは、Form_Layout イベント ハンドラーで具体的に指示しない限りサイズ変更されません。

問題は、サイズの変更、アンカー、ドックのどの組み合わせをそのイベント ハンドラーで試しても、常に tabControl の上部または下部がフォーム領域からはみ出し、Web ブラウザーのスクロール バー全体が表示されないことです。初期化; そのため、タブ コントロールが FLP 内に適切にドッキングされていません (または、FLP がフォームにドッキングされていません)。Form_layout コードは次のとおりです。

private void MyForm_Layout(object sender, LayoutEventArgs e)
{
    //resize FLP
    pnlMainFlowLayout.Size = this.Size - new Size(15, 0);
    pnlMainFlowLayout.Dock = DockStyle.Fill;
    pnlMainFlowLayout.BringToFront();

    //resize child control of FLP
    tabControl.Size = pnlMainFlowLayout.Size;
    tabControl.BringToFront();
}

FlowLayoutPanel のサイズ変更動作を理解する必要があります。

4

2 に答える 2

4

コントロールが 1 つしか含まれていない場合、FLP を使用しても意味がありません。その仕事は、その内部にコントロールを流すことであり、1 つしかない場合は何も流れません。

TabControl をそのまま使用し、Dock プロパティを Fill に設定します。それが TLP の 1 つとオーバーラップする場合は、TLP を右クリックし、[Send To Back] をクリックします。

于 2010-09-12T13:00:13.143 に答える
2

When using docking the order in which the controls are added to the parent are important. The control added first has a higher precedence. This precedence could lead to the effects you describe.

To ensure the correct docking behaviour select one of the controls docked at top or bottom and say send them to the background. Then select the other control and do the same. Usually this solves these kind of problems.

Just as a matter of interest why are you using a flow layout to render a single tab page, wouldn't it be better to place the tabControl directly on you form and set Dock to Fill?

于 2010-09-12T12:33:38.727 に答える