¿Cómo imito el comportamiento de selección múltiple / arrastrar y soltar del Explorador de Windows en un DataGridView?

Estoy tratando de imitar la forma en que el Explorador de Windows maneja la selección múltiple. En un DataGridView predeterminado, puede seleccionar varios elementos con Ctrl-clic. Pero si suelta la tecla Ctrl y luego intenta arrastrar y soltar los elementos seleccionados, borra los elementos seleccionados y solo selecciona la fila "hit". Encontré la siguiente solución en algún lugar en línea.

protected override OnMouseDown(MouseEventArgs e)
{
  int hitRowIndex = HitTest(e.X, e.Y).RowIndex;
  if(!SelectedRows.Contains(Rows[hitRowIndex]))
  {
    base.OnMouseDown();
  }
}

Sin embargo, esto causa otros efectos secundarios. Con la tecla CTRL presionada y moviendo el mouse hacia abajo en un elemento seleccionado, el elemento permanece seleccionado. Esto tiene sentido porque el evento mousedown se omite si se selecciona la fila en la que se hace clic. Al observar el comportamiento del Explorador de Windows, parece que la deselección de un elemento con la tecla CTRL no se maneja hasta el evento MouseUp. ¿Alguien ha tratado de hacer esto?

Respuestas a la pregunta(2)

Su respuesta a la pregunta