注意:TableLayoutPanelコントロールは.NET Framework 2.0以降でのみ使用できます。
Visual Studioのフォームデザイナを使ってTableLayoutPanelコントロールの行の高さや、列の幅を変更する方法は、「TableLayoutPanelコントロールを使って、コントロールを表形式で整列させる」で説明しました。つまり、プロパティウィンドウでRowsまたはやColumnsプロパティを変更しようとすると表示される「列と行のスタイル」ダイアログを使って行うことができます。
実際には、TableLayoutPanelクラスにRowsやColumnsプロパティは存在しません。これらの実体は、RowStylesプロパティとColumnStylesプロパティです。
例えば、一行目のサイズの型を絶対サイズの50ピクセルとするには、次のようにします。
TableLayoutPanel1.RowStyles(0) = New RowStyle(SizeType.Absolute, 50.0F)
tableLayoutPanel1.RowStyles[0] = new RowStyle(SizeType.Absolute, 50F);
RowStylesとColumnStylesはあくまでスタイル(サイズの型)のコレクションであって、行と列そのものを表しているわけではありません。
「列と行のスタイル」ダイアログのみで列(あるいは行)を管理している場合は、通常TableLayoutPanelの列の数とスタイルの数は一致します。つまり、TableLayoutPanelクラスのRowCountとRowStyles.Count(あるいはColumnCountとColumnStyles.Count)の数値は一致します。フォームデザイナを使ってTableLayoutPanelのRowCountやColumnCountを変更して列や行の数を増やした場合でも、それに応じてRowStylesやColumnStylesにスタイルが追加され、RowCountとRowStyles.Count(あるいはColumnCountとColumnStyles.Count)の数は通常同じになります。
注意:デザイナで列や行を増やした時は問題ありませんが、減らしたときは、前のスタイルが削除されずに残り、列や行数とスタイルの数が同じにならないことが多々(というよりほとんど)あります。この場合でもデザイナで見る限りでは分からず、コードを見なければ分かりません。
しかし、デザイナを使わないで列や行の数を変更した場合は、そうはなりません。RowCountやColumnCountプロパティを変更しても、RowStylesやColumnStylesに自動的にスタイルが追加されることはありません。こちらのように、Controls.Addで子コントロールを追加して行や列が拡張した場合も同じく、スタイルは追加されません。つまり、必要に応じて自分で追加しなければならないということになります。
その意味で、先ほど示した例も、「tableLayoutPanel1.RowStyles[0]」が存在するか分かりませんので、正しいやり方とは言えません。つまり、ある行のスタイルを変更するコードは、ちょっと面倒ですが、次のようになりそうです。
'スタイルを変更する行数 Dim rowIndex As Integer = 4 'スタイル Dim rs As New RowStyle(SizeType.Absolute, 50.0F) If TableLayoutPanel1.RowStyles.Count > rowIndex Then TableLayoutPanel1.RowStyles(rowIndex) = rs Else 'とりあえずRowStyleを埋める While TableLayoutPanel1.RowStyles.Count < rowIndex TableLayoutPanel1.RowStyles.Add( _ New RowStyle(SizeType.AutoSize)) End While TableLayoutPanel1.RowStyles.Add(rs) End If
//スタイルを変更する行数 int rowIndex = 4; //スタイル RowStyle rs = new RowStyle(SizeType.Absolute, 50F); if (tableLayoutPanel1.RowStyles.Count > rowIndex) { tableLayoutPanel1.RowStyles[rowIndex] = rs; } else { //とりあえずRowStyleを埋める while (tableLayoutPanel1.RowStyles.Count < rowIndex) { tableLayoutPanel1.RowStyles.Add( new RowStyle(SizeType.AutoSize)); } tableLayoutPanel1.RowStyles.Add(rs); }
(この記事は、「.NETプログラミング研究」で紹介したものを基にしています。)
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。