19

tablelayoutpanelがあります。2x2-2列2行。

たとえば、1行2列目にボタンbutton1を追加しました。button1には、Fillに設定されたdockプロパティがあります。VS Designerでは、 button1の列/行スパンプロパティを設定できます。

button1 の行スパンプロパティをプログラムで変更できるようにしたいので、2番目の列すべて(1行と2行目)を埋めて元に戻すことができます。

どのように?

4

2 に答える 2

33

このコードはどうですか?

private void button1_Click(object sender, EventArgs e)
{
    var control = sender as Control;

    if(control == null)
        return;

    if (1 == tableLayoutPanel1.GetRowSpan(control))
    {
        tableLayoutPanel1.SetRowSpan(control, 2);
    }
    else
    {
        tableLayoutPanel1.SetRowSpan(control, 1);
    }
}
于 2010-05-04T06:55:46.827 に答える
7

現在の賛成票の回答は非常に適切であると思いますが、必要以上にやや乱雑に見えます。プロパティを設定する前に、コントロールを tableLayoutPanel に追加する必要があります。

Visual Studio (2013 およびおそらく他のバージョン) は、これらのプロパティをコントロールの一部として表示します。実際には、それらは tableLayoutPanel の一部です。

説明:

tableLayoutPanel.Controls.Add(**control**, x, y)
tableLayoutPanel.SetColumnSpan(**control**, '# of cols to span')

例:

tableLayoutPanel1.Controls.Add(**button1**, 0, 0);
tableLayoutPanel1.SetColumnSpan(**button1**, 2);
tableLayoutPanel1.SetRowSpan(**button1**, 3);

結果: このスペースを「占有」するボタン。(領域をカバーするのに十分な大きさが提供されます。スペースを「カバー」しなくても、「予約」されます。)

O O X X X
O O X X X
O O X X X
X X X X X
X X X X X

スパンをグリッドのサイズよりも大きく設定すると.. : グリッドのサイズは変更されません。グリッドのサイズに合わせて数値をトリミング/編集しないでください。コンパイル時にエラーをスローしないでください。

スパンが現在のグリッド (tableLayoutPanel) の最大サイズに設定されているかのように動作/実行します。これは、TLP/グリッド サイズが変更された場合にのみ関係します。

2 つのコントロールをプログラムで同じグリッド位置に追加すると、グリッド内の最初のコントロールがその位置を維持します。その後追加されたコントロールは、次のセル ブロックにプッシュされます。「スパン」が追加されると、そのセル ブロックが使用済みとして扱われ、未使用のセル ブロックの検索が続行されます。

例: label1label2、およびlabel3が 0,0 に追加されます。

  • label1は 0,0 に表示されます
  • ラベル 2 : 0,1
  • label3 : 0,2

例 2: ラベル 1 の行スパンは 2 です。

  • label1 : 0,0
  • label2 : 0,2 に再配置
  • label3 : 0,3

正しいグリッド ポイントとスパンを選択したら、ドックとアンカーのプロパティを使用してレイアウトをさらに最適化できます。

于 2015-09-28T20:32:33.550 に答える