private void GridView_ItemClick(object sender, ItemClickEventArgs e) { //Enter 입력 시 Visible 이면 넘어가기 if (TableControlPanel.Visibility != Visibility.Visible) { TableData tableData = (TableData)e.ClickedItem; TableControlPanel.Pay += TableControlPanel_Pay; TableControlPanel.Order += TableControlPanel_Order; TableControlPanel.Canceled += TableControlPanel_Canceled; TableControlPanel.Show(tableData); } }
/// <summary> /// 引数の <paramref name="tableControlList"/> に存在する全てのコントロールを、 /// <see cref="TableLayoutPanel"/> に追加する(先頭行に追加する) /// </summary> /// <param name="tableControlList"> /// 追加対象のコントロールのリスト /// (NULL 又は、要素0の場合、追加対象なしとして処理を終了する) /// </param> /// <exception cref="Exception"> /// 追加するコントロールがトップレベルのコントロール または、 /// 追加によって循環参照になる場合に発生 /// </exception> public void Add(IList <Control> tableControlList) { // 対象のTableLayoutPanelコントロール取得 TableLayoutPanel tablePanel = PlListTable; // 引数のコレクションがNULL 又は、0行の場合、追加対象なしとして処理を終了する if (tableControlList == null || tableControlList.Count == 0) { return; } // 描画処理を一時中断 tablePanel.SuspendLayout(); try { // 現在の行数が1以下かつコントロールが未配置の状態であるかの判定を取得 bool isNoRow = IsNoRow(); // 現状の行数を取得 // (現在の行数が1以下かつコントロールが未配置の状態の場合、現在の行数は0とする) int beforeRowCount = isNoRow ? 0 : tablePanel.RowCount; // 追加する行数 int addRowCount = tableControlList.Count; // 行カウントを増やす tablePanel.RowCount = beforeRowCount + addRowCount; // スタイル情報を配列で取得し、追加する行数分配列を拡張する RowStyle[] rowStyles = tablePanel.RowStyles.ToArray(); Array.Resize(ref rowStyles, beforeRowCount + addRowCount); // 追加行数分コントロール及びスタイルを下に移動させる for (int row = beforeRowCount - 1; row >= 0; row--) { MoveRow( toRowIndex: row + addRowCount, getControl: (column) => tablePanel.GetControlFromPosition(column, row), rowStyles: ref rowStyles, getRowStyle: () => rowStyles[row]); } // 追加対象のコントロールとそのスタイルを追加 int rowIndex = 0; foreach (Control control in tableControlList) { // コントロールの設定 // ラジオボタン TableRadioButton radioButton = new TableRadioButton(tablePanel, (int)ListTableColumn.Radio, SelectRowBackColor); TableRadioButtons.Add(radioButton); tablePanel.Controls.Add(radioButton, (int)ListTableColumn.Radio, rowIndex); // パネル TableControlPanel controlPanel = new TableControlPanel(control); TableControlPanels.Add(controlPanel); tablePanel.Controls.Add(controlPanel, (int)ListTableColumn.Control, rowIndex); // スタイルを設定 rowStyles[rowIndex] = new RowStyle(); // 行インデックスをインクリメント rowIndex++; } // スタイルを再設定 SetRowStyle(rowStyles); // Tabインデックスの再設定を行う SetTabIndex(); } finally { // 描画処理を再開 tablePanel.ResumeLayout(false); tablePanel.PerformLayout(); } }