C# datagridview c键盘上的多项选择
我需要为datagridview创建一些键盘快捷键。 我需要允许用户不使用鼠标选择多行。e、 g.在windows资源管理器中,您可以: 按住Ctrl键并首先选择 向上/向下移动到下一个选择 空间选择其他人。C# datagridview c键盘上的多项选择,c#,.net,datagridview,keyboard-shortcuts,multipleselection,C#,.net,Datagridview,Keyboard Shortcuts,Multipleselection,我需要为datagridview创建一些键盘快捷键。 我需要允许用户不使用鼠标选择多行。e、 g.在windows资源管理器中,您可以: 按住Ctrl键并首先选择 向上/向下移动到下一个选择 空间选择其他人。 这在C语言中是可能的吗?是的,这是可能的。因为Ctrl+←→↑↓ 已经有了默认行为,例如分别导航到最左边、最右边、最上面和最下面的单元格,您必须继承DataGridView类并重写ProcessDataGridViewKey方法来处理这些用户操作以及Ctrl+Space来选择行 publi
这在C语言中是可能的吗?是的,这是可能的。因为Ctrl+←→↑↓ 已经有了默认行为,例如分别导航到最左边、最右边、最上面和最下面的单元格,您必须继承DataGridView类并重写ProcessDataGridViewKey方法来处理这些用户操作以及Ctrl+Space来选择行
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对象的实例替换为此类的实例,就完成了
Shift+箭头键应该可以正常工作。还是要突出显示非连续行?@OhBeWise是的,我是指非连续行。