DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

TableLayoutPanelの行や列の幅を変更する

注意:TableLayoutPanelコントロールは.NET Framework 2.0以降でのみ使用できます。

フォームデザイナを使用した方法

Visual Studioのフォームデザイナを使ってTableLayoutPanelコントロールの行の高さや、列の幅を変更する方法は、「TableLayoutPanelコントロールを使って、コントロールを表形式で整列させる」で説明しました。つまり、プロパティウィンドウでRowsまたはやColumnsプロパティを変更しようとすると表示される「列と行のスタイル」ダイアログを使って行うことができます。

「列と行のスタイル」ダイアログ

コードによる方法

実際には、TableLayoutPanelクラスにRowsやColumnsプロパティは存在しません。これらの実体は、RowStylesプロパティColumnStylesプロパティです。

例えば、一行目のサイズの型を絶対サイズの50ピクセルとするには、次のようにします。

VB.NET
コードを隠すコードを選択
TableLayoutPanel1.RowStyles(0) = New RowStyle(SizeType.Absolute, 50.0F)
C#
コードを隠すコードを選択
tableLayoutPanel1.RowStyles[0] = new RowStyle(SizeType.Absolute, 50F);

RowStylesとColumnStylesに関する補足、注意事項

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]」が存在するか分かりませんので、正しいやり方とは言えません。つまり、ある行のスタイルを変更するコードは、ちょっと面倒ですが、次のようになりそうです。

VB.NET
コードを隠すコードを選択
'スタイルを変更する行数
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
C#
コードを隠すコードを選択
//スタイルを変更する行数
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 Tipsをご利用いただく際は、注意事項をお守りください。