datagridview键盘上的多个选择c#

datagridview键盘上的多个选择c#

问题描述:

我需要为datagridview创建几个键盘快捷键。 我需要允许用户选择多行行而不使用鼠标。 例如在Windows Explorer中,您可以: 保持Ctrl(第一选择) Up/down(移动到下一个选择) Space(选择其他)。 这是可能在C#做?datagridview键盘上的多个选择c#

+0

'Shift' +'Arrow Keys' should work fine。或者你的意思是突出显示非连续的行? – OhBeWise

+0

@OhBeWise是的,我的意思是不连续的。 – Claire

是的,这是可能的。由于按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就大功告成了。

Screen-shot of Keyboard selecting rows