Я пытаюсь имитировать способ, которым проводник Windows обрабатывает множественный выбор. В 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. Кто-нибудь пытался это сделать?