注意:TableLayoutPanelコントロールは.NET Framework 2.0以降でのみ使用できます。
Visual Studioのフォームデザイナを使ってTableLayoutPanelコントロールの行や列を削除する方法は、「TableLayoutPanelコントロールを使って、コントロールを表形式で整列させる」で説明していますので、そちらをご覧ください。ここではコードによる方法を紹介します。
「TableLayoutPanelの行や列を挿入する」と同じ方針で行ってみましょう。
以下の例では、removeRowの位置の行を削除しています。「TableLayoutPanelコントロールを使って、コントロールを表形式で整列させる」で紹介しているサンプル「TableLayoutPanel1.exe」からの抜粋です。
TableLayoutPanel1.SuspendLayout() Dim c As Control For Each c In TableLayoutPanel1.Controls Dim pos As TableLayoutPanelCellPosition = _ TableLayoutPanel1.GetPositionFromControl(c) TableLayoutPanel1.SetCellPosition(c, pos) If TableLayoutPanel1.RowCount <= pos.Row Then TableLayoutPanel1.RowCount = pos.Row + 1 End If If TableLayoutPanel1.ColumnCount <= pos.Column Then TableLayoutPanel1.ColumnCount = pos.Column + 1 End If Next c '削除する列にあるコントロールを削除 Dim x As Integer For x = 0 To TableLayoutPanel1.ColumnCount - 1 c = TableLayoutPanel1.GetControlFromPosition(x, removeRow) If Not (c Is Nothing) Then TableLayoutPanel1.Controls.Remove(c) End If Next x 'コントロールを移動 Dim y As Integer For y = removeRow + 1 To TableLayoutPanel1.RowCount - 1 For x = 0 To TableLayoutPanel1.ColumnCount - 1 c = TableLayoutPanel1.GetControlFromPosition(x, y) If Not (c Is Nothing) Then TableLayoutPanel1.SetCellPosition( _ c, New TableLayoutPanelCellPosition(x, y - 1)) End If Next x Next y '列を減らす If TableLayoutPanel1.RowCount > 0 Then TableLayoutPanel1.RowCount -= 1 End If 'スタイルを削除 If TableLayoutPanel1.RowStyles.Count > removeRow Then TableLayoutPanel1.RowStyles.RemoveAt(removeRow) End If TableLayoutPanel1.ResumeLayout()
tableLayoutPanel1.SuspendLayout(); foreach (Control c in tableLayoutPanel1.Controls) { TableLayoutPanelCellPosition pos = tableLayoutPanel1.GetPositionFromControl(c); tableLayoutPanel1.SetCellPosition(c, pos); if (tableLayoutPanel1.RowCount <= pos.Row) tableLayoutPanel1.RowCount = pos.Row + 1; if (tableLayoutPanel1.ColumnCount <= pos.Column) tableLayoutPanel1.ColumnCount = pos.Column + 1; } //削除する列にあるコントロールを削除 for (int x = 0; x < tableLayoutPanel1.ColumnCount; x++) { Control c = tableLayoutPanel1.GetControlFromPosition(x, removeRow); if (c != null) { tableLayoutPanel1.Controls.Remove(c); } } //コントロールを移動 for (int y = removeRow + 1; y < tableLayoutPanel1.RowCount; y++) { for (int x = 0; x < tableLayoutPanel1.ColumnCount; x++) { Control c = tableLayoutPanel1.GetControlFromPosition(x, y); if (c != null) { tableLayoutPanel1.SetCellPosition( c, new TableLayoutPanelCellPosition(x, y - 1)); } } } //列を減らす if (tableLayoutPanel1.RowCount > 0) tableLayoutPanel1.RowCount--; //スタイルを削除 if (tableLayoutPanel1.RowStyles.Count > removeRow) { tableLayoutPanel1.RowStyles.RemoveAt(removeRow); } tableLayoutPanel1.ResumeLayout();
このように、実行時にTableLayoutPanelに行や列を挿入あるいは削除するのは簡単ではありません。.NET Frameworkにこのような機能が用意されていないということは、もしかしたら実行時にTableLayoutPanelに行や列を挿入、削除するのは好ましくないということかもしれません。
(この記事は、「.NETプログラミング研究」で紹介したものを基にしています。)
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。