Пример #1
0
        /// <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();
                    }
                }
            }
        }