0

TableLayoutPanel を動的に作成してから、その中に配置する Label と TextBoxes を動的に作成しています。

列と行の数を TableLayoutPanel に割り当てることができるのは論理的に思えます。

tableLayoutPanelGreatGooglyMoogly = new TableLayoutPanel();
tableLayoutPanelGreatGooglyMoogly.RowCount = NUMBER_OF_ROWS;
tableLayoutPanelGreatGooglyMoogly.ColumnCount = NUMBER_OF_COLUMNS;

...その中に配置するコントロールを作成します。

Label lbl = new Label();
lbl.Parent = tableLayoutPanelGreatGooglyMoogly;
. . .

...そして、作成されたコントロールを指定された「セル」(列と行) に配置します。

tableLayoutPanelGreatGooglyMoogly.SetColumn(lbl, ACol); // "ACol" is the current column
tableLayoutPanelGreatGooglyMoogly.SetRow(lbl, i); // "i" is the current row

...しかし、それは機能しません-動的に作成された子コントロールの幅と高さの値を指定した場合も、指定しなかった場合も(その場合、それらは大きすぎます-具体的には、幅が大きすぎます)。

アップデート

このコードを追加しましたが、違いはありません。

// 行

tableLayoutPanelGreatGooglyMoogly.RowCount = NUMBER_OF_ROWS;
TableLayoutRowStyleCollection rowStyles =
    this.tableLayoutPanelGreatGooglyMoogly.RowStyles;

    foreach (RowStyle rStyle in rowStyles) {
        rStyle.SizeType = SizeType.Percent;
        rStyle.Height = 8;
    }

// COLUMNS
tableLayoutPanelGreatGooglyMoogly.ColumnCount = TOTAL_NUMBER_OF_COLUMNS;
TableLayoutColumnStyleCollection columnStyles =
    this.tableLayoutPanelGreatGooglyMoogly.ColumnStyles;

    foreach (ColumnStyle cStyle in columnStyles) {
        cStyle.SizeType = SizeType.Percent;
        cStyle.Width = 12;
    }

UPDATEからUPDATEへ

設計時に、Label または TextBox (おそらく任意のコントロール) に Cell[col,row] プロパティがあることがわかります。読み取り専用でない場合は、動的にアクセスして、次のように設定できるようにしたいと思います。

lbl.Cell = i,i
txtbox.Cell = i+1,i

コードでそれを行うことは可能ですか?その時点では、「Cell」プロパティは認識されていないようです(当然のことだと思います)。

UPDATE REVISITED への UPDATE

次のコード行を追加しました。

tableLayoutPanelGreatGooglyMoogly.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single;

...そして、ラベルとテキストボックスが実際にセル(列と行) にあることがわかりました。

ただし、ラベルをセルの左上隅からセルの中央 (垂直方向と水平方向の両方) に移動する必要があります。

設計時でも (フォームに「テスト」/一時的な TableLayoutPanel を使用)、追加されたラベルは、TextAlign を何に設定しても (「中央」が最も賢明なようです)、セルの左上に頑固に貼り付けられたままです。

同様に、設計時にラベルの Location.X と Location.Y を変更しても何も起こりません。ラベルは、フジツボのようにセルの北西の角にくっついています。

4

1 に答える 1

3

ほとんど言及されていない GridLayoutPanel の使用の重要な部分は、子コントロールでの Anchor プロパティの使用です。

Anchor プロパティは、各子コントロールが拡張されるセルの端を決定します。

ラベルを作成するときは、次のようにします。

Label lbl = new Label();
lbl.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
lbl.Parent = tableLayoutPanelGreatGooglyMoogly;

ラベルをセルのフルサイズに引き伸ばす必要があります。

「ドッキングとアンカーを使用したセル内のコントロールの配置」セクションのhttp://msdn.microsoft.com/en-us/library/w4yc3e8c(v=vs.80).aspxを参照してください。

于 2012-05-09T06:14:16.437 に答える