/// <summary> /// <see cref="PlListTable"/> の対象行に存在する子コントロールを削除する /// </summary> /// <param name="removeRowIndex"> /// 削除対象の行インデックス /// </param> /// <param name="isDelete"> /// 削除処理かどうかのフラグ /// 削除の場合:True、移動の場合:False /// (削除の場合は対象のコントロールの Dispose を行う) /// </param> /// <exception cref="ArgumentOutOfRangeException"> /// 引数の <paramref name="removeRowIndex"/> が <see cref="PlListTable"/> コントロールの /// 行の範囲(0以上、行カウント未満の範囲)の値でない場合に発生 /// </exception> private void RemoveRow(int removeRowIndex, bool isDelete) { // 対象のTableLayoutPanelコントロール取得 TableLayoutPanel tablePanel = PlListTable; // 引数のチェック if (removeRowIndex < 0 || removeRowIndex >= tablePanel.RowCount) { // 引数のremoveRowIndexがtablePanelの行の範囲にない場合 throw new ArgumentOutOfRangeException(nameof(removeRowIndex)); } // 削除対象行に存在する全てのコントロールを削除する for (int column = 0; column < tablePanel.ColumnCount; column++) { Control removeControl = tablePanel.GetControlFromPosition(column, removeRowIndex); if (removeControl != null) { tablePanel.Controls.Remove(removeControl); // 削除の場合は対象のコントロールを破棄する if (isDelete) { if (removeControl is TableRadioButton radio) { TableRadioButtons.Remove(radio); } else if (removeControl is TableControlPanel panel) { TableControlPanels.Remove(panel); } removeControl.Dispose(); } } } }