| 
                ■No90272 (sakamoto さん) に返信 > SelectionChangedイベントは発生させないようにしたいのですが、
  DataGridView の OnSelectionChanged をオーバーライドして、
   protected override void OnSelectionChanged(EventArgs e)  {    if(発生させても良い) { base.OnSelectionChanged(e); }  }
  のように実装すれば OK です。ただし、イベントが発生しなくなるだけ。
  選択セル、アクティブセル、アンカーセル、フォーカスセルなどの管理は 別途実装する必要があります。
 
  既定の設定だと、Ctrl+ドラッグによる「複数の非連続範囲を選択」が可能ですし、 「全てのセルを選択」することもできる点にも注意してください。
 
  > dataGridViewの選択処理について質問があります。
  「最初の 3 行」までは普通に選択できるが、 それ以降は 1 行おきにしか選択できない DataGridView の実装例。
  class SakamotoGrid : DataGridView {   protected override void SetSelectedRowCore(int rowIndex, bool selected)   {     if (rowIndex % 2 == 0 || rowIndex < 3)     {       base.SetSelectedRowCore(rowIndex, selected);     }   }   protected override void SetSelectedColumnCore(int columnIndex, bool selected)   {     // base.SetSelectedColumnCore(columnIndex, selected);   }   protected override void SetSelectedCellCore(int columnIndex, int rowIndex, bool selected)   {     if (rowIndex % 2 == 0 || rowIndex < 3)     {       base.SetSelectedCellCore(columnIndex, rowIndex, selected);     }   }   protected override bool SetCurrentCellAddressCore(int columnIndex, int rowIndex, bool setAnchorCellAddress, bool validateCurrentCell, bool throughMouseClick)   {     if (rowIndex % 2 == 0 || rowIndex < 3)     {       return base.SetCurrentCellAddressCore(columnIndex, rowIndex, setAnchorCellAddress, validateCurrentCell, throughMouseClick);     }     else     {       return false;     }   } };
 
  > datagridviewの行が選択されている状態で、別の行を選択をした際、
  DataGridView の場合、  (1) 現在のセル(行ヘッダ列に三角マークがつく)  (2) 選択されているセル(選択色で反転表示されているセル)  (3) フォーカスのあるセル(Tab キーを押すと移動するセルを囲む破線) はそれぞれ別物として管理されていますが、その点は大丈夫でしょうか?
 
  1 は CellEnter イベントや CurrentCellAddress プロパティなど 2 は SelectionChanged イベントや SelectedCells プロパティなど
  たとえば Shift キーを押しながら他の行をクリックした場合、 1 にあたるセル(アンカーセル)は変化しないまま、 2 の状態が変更されます。
 
 
  > 特定の行の場合は選択をキャンセルし、元々選択されていた行に選択を戻し、
  この仕様だと、キーボード(矢印キーなど)での移動が阻害されてしまうのが難点ですね。
  |