- PR -

TableLayoutPanelへのコントロールの配置

1
投稿者投稿内容
A.G.
会議室デビュー日: 2008/06/19
投稿数: 7
投稿日時: 2008-06-19 17:50
[VS2005 C# Windows Application]
初歩的な問題と思うのですが、ご教授願います。
データテーブルに格納した指定列の値をTableLayoutPanelに表示させようとしています。
TableLayoutPanelは 3 × n の行可変です。
ロード時にテーブルの中から1つずつADD処理を行っているのですが、行追加時の行の高さと追加するボタンの高さの兼ね合いが(何かしら)一定値を超えると上から2行の行の幅が物凄く大きくなる(もしくは小さくなる)等の現象が発生します。
行の高さと追加ボタンの高さを増減していって、なんとか正常表示と思われる設定を見つけたのですが、その状態で新たなコントロール追加イベントを何回か呼ぶと、再び表示が崩れてしまいます。

行追加の処理を追加した理由は表示させたいデータ150個を処理した場合、行や(高さ?)が足りないからなのか、Form上には行が上書きされ、最後の1行(ボタンコントロールが3つ)だけが見えてる状態だったからです。
感覚的に行やボタンの高さ(そもそも行追加のイベント自体も)の設定はせずに自動でなるものと思っていたのですが違うのでしょうか?
それともパネルサイズ、行の高さ、コントロールの高さは綿密な設定が必要なのでしょうか?
伝わりにくい質問で申し訳ありませんが、よろしくお願いいたします。

※MainteButtonは別途クラス化してるボタンです。

DataTable dt = this.SampleDataSet.testMst;
int iCount = tableLayoutPanel1.Controls.Count;
int iWidth = tableLayoutPanel1.Size.Width;
int iHeight = tableLayoutPanel1.Size.Height;
int iPlusSize = 30;
for (int i = 0; i < iCount; ++i)
{
//右端(座標(x,2))が埋まっている時は改行およびパネルサイズ拡張
if ((i % 3 == 0) && (i != 0))
{
tableLayoutPanel1.RowCount = tableLayoutPanel1.RowCount + 1;
tableLayoutPanel1.Size = new Size(iWidth, tableLayoutPanel1.Size.Height + iPlusSize);
}

MainteButton mbtn = new MainteButton();
mbtn.Size = new Size(150, 24);
mbtn.Dock = DockStyle.Fill;
mbtn.Text = (string)dt.Rows[i].ItemArray.GetValue(4);

//tableLayoutPanel1.Controls.Add(mbtn, (i % 3), (i / 3));
tableLayoutPanel1.Controls.Add(mbtn);

//クリックイベント追加
mbtn.Click += new EventHandler(mbtn_Click);

}


[ メッセージ編集済み 編集者: A.G. 編集日時 2008-06-19 17:55 ]

[ メッセージ編集済み 編集者: A.G. 編集日時 2008-06-19 17:56 ]
1

スキルアップ/キャリアアップ(JOB@IT)