datagridview c# 键盘上的多项选择
multiple selection on keyboard for datagridview c#
我需要为 datagridview
创建一些键盘快捷键。
我需要允许用户在不使用鼠标的情况下 select 多个 行。 例如 在 windows 资源管理器中,您可以:
先按住Ctrl
(select)
Up/down
(移至下一个 selection)
Space
(select 其他)。
这可以在 C#
中完成吗?
是的,这是可能的。因为Ctrl+←→↑↓ 已有默认行为(例如分别导航到最左侧、最右侧、最顶部和最底部的单元格),您必须继承 DataGridView
class 并覆盖 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;
}
}
}
}
现在只需将 Form
中 DataGridView
对象的实例替换为此 class 的实例即可。
我需要为 datagridview
创建一些键盘快捷键。
我需要允许用户在不使用鼠标的情况下 select 多个 行。 例如 在 windows 资源管理器中,您可以:
先按住Ctrl
(select)
Up/down
(移至下一个 selection)
Space
(select 其他)。
这可以在 C#
中完成吗?
是的,这是可能的。因为Ctrl+←→↑↓ 已有默认行为(例如分别导航到最左侧、最右侧、最顶部和最底部的单元格),您必须继承 DataGridView
class 并覆盖 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;
}
}
}
}
现在只需将 Form
中 DataGridView
对象的实例替换为此 class 的实例即可。