トップ回答者
DataGridView でセルを範囲選択したときの最初の選択位置取得

質問
回答
-
SelectedCells[0]じゃ駄目ってことですか?
それならSelectionChangedのタイミングでひとつしか選択されていないときの状態を最初の選択位置として記録しておけばいいです。
ただし、Ctrlを押しながらクリックすると選択解除されるのでその場合にどうするの考える必要がありますよ。public class DataGridViewEx : DataGridView { private int indexFirstRow = -1; private int indexFirstColumn = -1; protected override void OnSelectionChanged(EventArgs e) { int singleSelect; switch (this.SelectionMode) { case DataGridViewSelectionMode.CellSelect: //through case DataGridViewSelectionMode.RowHeaderSelect://through case DataGridViewSelectionMode.ColumnHeaderSelect: singleSelect = 1; break; case DataGridViewSelectionMode.FullRowSelect: singleSelect = this.Columns.Count; break; case DataGridViewSelectionMode.FullColumnSelect: singleSelect = this.Rows.Count; break; default: singleSelect = -1; break; } if (this.SelectedCells.Count == 0) { indexFirstColumn = -1; indexFirstRow = -1; } else if (this.SelectedCells.Count == singleSelect) { indexFirstRow = this.CurrentCell.RowIndex; indexFirstColumn = this.CurrentCell.ColumnIndex; } base.OnSelectionChanged(e); } public DataGridViewCell FirstCelectedCell { get { DataGridViewCell cell; if (this.SelectedCells.Count == 0) { return null; } if (0 <= indexFirstRow && indexFirstRow < this.Rows.Count && 0 <= indexFirstColumn && indexFirstColumn < this.Columns.Count) { cell = this[indexFirstColumn , indexFirstRow]; if (cell.Selected) { return cell; } } cell = this.SelectedCells[0]; indexFirstColumn = cell.ColumnIndex; indexFirstRow = cell.RowIndex; return cell; } }
- 回答としてマーク yasheeki 2010年4月25日 13:25
すべての返信
-
SelectedCells[0]じゃ駄目ってことですか?
それならSelectionChangedのタイミングでひとつしか選択されていないときの状態を最初の選択位置として記録しておけばいいです。
ただし、Ctrlを押しながらクリックすると選択解除されるのでその場合にどうするの考える必要がありますよ。public class DataGridViewEx : DataGridView { private int indexFirstRow = -1; private int indexFirstColumn = -1; protected override void OnSelectionChanged(EventArgs e) { int singleSelect; switch (this.SelectionMode) { case DataGridViewSelectionMode.CellSelect: //through case DataGridViewSelectionMode.RowHeaderSelect://through case DataGridViewSelectionMode.ColumnHeaderSelect: singleSelect = 1; break; case DataGridViewSelectionMode.FullRowSelect: singleSelect = this.Columns.Count; break; case DataGridViewSelectionMode.FullColumnSelect: singleSelect = this.Rows.Count; break; default: singleSelect = -1; break; } if (this.SelectedCells.Count == 0) { indexFirstColumn = -1; indexFirstRow = -1; } else if (this.SelectedCells.Count == singleSelect) { indexFirstRow = this.CurrentCell.RowIndex; indexFirstColumn = this.CurrentCell.ColumnIndex; } base.OnSelectionChanged(e); } public DataGridViewCell FirstCelectedCell { get { DataGridViewCell cell; if (this.SelectedCells.Count == 0) { return null; } if (0 <= indexFirstRow && indexFirstRow < this.Rows.Count && 0 <= indexFirstColumn && indexFirstColumn < this.Columns.Count) { cell = this[indexFirstColumn , indexFirstRow]; if (cell.Selected) { return cell; } } cell = this.SelectedCells[0]; indexFirstColumn = cell.ColumnIndex; indexFirstRow = cell.RowIndex; return cell; } }
- 回答としてマーク yasheeki 2010年4月25日 13:25