Нужно, что бы при нажатом Ctrl строки выделялись, и не снималось выделение при повторном клике на одну из выделенных строк. То есть - зажали Ctrl - > кликнули на строку с индексом 0 -> она стала синей - > и сколько бы мы на нее не кликали синей она и останется, пока нажат Ctrl. Как сделать? Сейчас у меня так :
private void gridAction_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control == true)
gridAction.MultiSelect = true;
}
private void gridAction_KeyUp(object sender, KeyEventArgs e)
{
if (e.Control == false)
gridAction.MultiSelect = false;
}
Но мне нужно запретить снимать выделение со строки если нажат Ctrl.
Я придумал такой велосипед.
Добавьте поле формы:
List<DataGridViewRow> selectedRows = new List<DataGridViewRow>();
Это будет список выделенных в текущий момент строк.
Подпишите DataGridView
на событие SelectionChanged
и разместите в нём следующий код:
private void DataGridView_SelectionChanged(object sender, EventArgs e)
{
// Нажата клавиша Control
if ((ModifierKeys & Keys.Control) == Keys.Control)
{
if (dataGridView.SelectedRows.Count > selectedRows.Count)
{
selectedRows.Clear();
selectedRows.AddRange(dataGridView.SelectedRows.Cast<DataGridViewRow>());
}
else
{
foreach (var row in selectedRows)
row.Selected = true;
}
}
else
{
selectedRows.Clear();
}
}
Логика такая. При нажатой клавише Control, если выделенных строк больше, чем в нашем списке, то добавляем в него все эти выделенные строки. Если выделенных строк стало меньше (то есть пользователь кликнул по ранее выделенной строке), то восстанавливаем выделение из нашего списка.
Когда выделение строк меняется без нажатой клавиши Control, очищаем наш список.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Может ли кто-то объяснить значение третьей строки в коде?
Возможно ли сделать запрос используя средства EF не описывая при этом контекст базы данных, либо создав и описав его непосредственно в функции...
Вот у меня закачен на сервере файл "файлtxt", и мне его надо без перекачки переименовать