1

アプリの作業を行うカスタム ユーザー コントロールがあります。

一度にフォームに可変数のユーザーコントロールを配置する必要があります。その数は実行時にわかります。

私は、それぞれがクライアントの幅いっぱいになり、すべてのコントロールがウィンドウを埋めて、同じサイズになるようにしたい. 2 つある場合は、それぞれがクライアントの高さの半分になります。3 つある場合は、それぞれがクライアントの高さの 3 分の 1 になります。

また、メイン ウィンドウのサイズが変更されると、レイアウトのサイズも変更されます。メインウィンドウのサイズを変更する以外に、ユーザーがコントロールのサイズを変更できるようにしたくない (したがって、分割コンテナーが出ている)

これを行うために TableLayoutPanel を使用しようとしましたが、GrowStyle プロパティを TableLayoutPanelGrowStyle.AddRows に設定し、コントロールを追加しても、行数は変わりません。

確かに、このレイアウト スキームを達成するのは難しくありませんか? 私はそれを理解できないようですか?

ありがとう

4

3 に答える 3

3

レイアウトを計算するのは簡単ですが、TLP を有効にするのはかなり難しくなります。これは、デザイナーでは非常にうまく機能するコントロールですが、予測できない数のコントロールがある場合はかなり厄介です。

これも問題なく動作し、コードが大幅に減り、UI を遅くするコントロールが 1 つ減ります。

    protected override void OnResize(EventArgs e) {
        for (int ix = 0; ix < Controls.Count; ++ix) {
            int y1 = this.ClientSize.Height * ix / Controls.Count;
            int y2 = this.ClientSize.Height * (ix + 1) / Controls.Count;
            Controls[ix].Bounds = new Rectangle(0, y1, this.ClientSize.Width, y2-y1);
        }
        base.OnResize(e);
    }
    protected override void OnLoad(EventArgs e) {
        OnResize(e);
        base.OnLoad(e);
    }
于 2013-04-30T19:23:34.737 に答える
0

ボタンを使用して、1 つのセルと Row.SizeType = Percentage で構成された TableLayoutPanel の各セルを埋める小さな例を次に示します。

private int buttonCount = 0;

void button1_Click(object sender, EventArgs e) {
  Button b = new Button() { Text = "Button #" + (++buttonCount).ToString() };
  b.Dock = DockStyle.Fill;

  if (buttonCount == 1) {
    tlp.Controls.Add(b, 0, 0);
  } else {
    tlp.RowStyles.Add(new RowStyle() { SizeType = SizeType.Percent });
    tlp.Controls.Add(b, 0, tlp.RowCount);
    tlp.RowCount++;
  }

  Single percHeight = ((Single)1 / (Single)tlp.RowStyles.Count) * 100;

  foreach (RowStyle rs in tlp.RowStyles) {
    rs.Height = percHeight;
  }
}

ボタン (またはユーザー コントロール) を追加するたびに、各行の高さのパーセンテージを再計算します。

于 2013-04-30T16:28:19.397 に答える
0

はい、テーブル レイアウト パネルを使用できます。各行の高さと幅は、すべての行と同じパーセンテージにする必要があります。その後、それは動作します。

于 2013-04-30T16:16:01.297 に答える