datagridview键盘上的多个选择c#
问题描述:
我需要为datagridview
创建几个键盘快捷键。 我需要允许用户选择多行行而不使用鼠标。 例如在Windows Explorer中,您可以: 保持Ctrl
(第一选择) Up/down
(移动到下一个选择) Space
(选择其他)。 这是可能在C#
做?datagridview键盘上的多个选择c#
答
是的,这是可能的。由于按Ctrl +←→↑↓已经有默认的行为(如分别导航到最左边,最右边,最顶部,而最底层的细胞),你会必须继承DataGridView
类并覆盖ProcessDataGridViewKey
方法来处理这些用户操作以及Ctrl + 空间用于选择行。
public class MultSelectKeyDGV : DataGridView
{
protected override bool ProcessDataGridViewKey(KeyEventArgs e)
{
KeyEventArgs keyEventArgs = null;
DataGridViewSelectedCellCollection selectedCells = null;
bool selectRow = false;
if (e.Control)
{
switch (e.KeyCode)
{
case Keys.Down:
keyEventArgs = new KeyEventArgs(Keys.Down);
selectedCells = this.SelectedCells;
break;
case Keys.Up:
keyEventArgs = new KeyEventArgs(Keys.Up);
selectedCells = this.SelectedCells;
break;
case Keys.Right:
keyEventArgs = new KeyEventArgs(Keys.Right);
selectedCells = this.SelectedCells;
break;
case Keys.Left:
keyEventArgs = new KeyEventArgs(Keys.Left);
selectedCells = this.SelectedCells;
break;
case Keys.Space:
keyEventArgs = new KeyEventArgs(Keys.None);
selectRow = true;
break;
default:
keyEventArgs = e;
break;
}
}
else
{
keyEventArgs = e;
}
bool result = base.ProcessDataGridViewKey(keyEventArgs);
if (e.Control)
{
this.CurrentRow.Selected = selectRow;
this.KeepSelected(selectedCells);
}
return result;
}
private void KeepSelected(DataGridViewSelectedCellCollection selected)
{
if (selected != null && this.MultiSelect)
{
foreach (DataGridViewCell cell in selected)
{
cell.Selected = true;
}
}
}
}
现在只要用这个类的一个实例替换您的DataGridView
对象的实例在Form
就大功告成了。
'Shift' +'Arrow Keys' should work fine。或者你的意思是突出显示非连续的行? – OhBeWise
@OhBeWise是的,我的意思是不连续的。 – Claire