Como eu imito o comportamento de seleção múltipla / arrastar e soltar do Windows Explorer em um DataGridView?

Eu estou tentando imitar a maneira como o Windows Explorer lida com seleção múltipla. Em um DataGridView padrão, você pode selecionar vários itens usando o Ctrl-click. Mas se você soltar a tecla Ctrl e tentar arrastar / soltar os itens selecionados, ele apaga os itens selecionados e seleciona apenas a linha "acertar". Eu encontrei a seguinte solução em algum lugar online.

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

No entanto, isso causa outros efeitos colaterais. Com a tecla CTRL pressionada e passando o mouse sobre um item selecionado, o item permanece selecionado. Isso faz sentido porque o evento mousedown é ignorado se a linha clicada for selecionada. Observando o comportamento do Windows Explorer, parece que a desmarcação de um item com a tecla CTRL retida não é tratada até o evento MouseUp. Alguém já tentou fazer isso?

questionAnswers(2)

yourAnswerToTheQuestion