Как имитировать поведение множественного выбора / перетаскивания в проводнике Windows в DataGridView?

Я пытаюсь имитировать способ, которым Windows Explorer обрабатывает множественный выбор. В DataGridView по умолчанию вы можете выбрать несколько элементов, нажав Ctrl. Но если вы отпустите клавишу Ctrl, а затем попытаетесь перетащить / отпустить выбранные элементы, он очистит выбранные элементы и выберет только строку «ударить». Я нашел следующее решение где-то в Интернете.

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

Однако это вызывает другие побочные эффекты. При нажатой клавише CTRL и наведении курсора мыши на выбранный элемент, элемент остается выбранным. Это имеет смысл, потому что событие mousedown игнорируется, если выбрана строка, по которой щелкнули. Если посмотреть на поведение Windows Explorer, то выглядит, что отмена выбора элемента с нажатой клавишей CTRL не обрабатывается до события MouseUp. Кто-нибудь пытался это сделать?

Ответы на вопрос(2)

Ваш ответ на вопрос