Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# datagridview c键盘上的多项选择_C#_.net_Datagridview_Keyboard Shortcuts_Multipleselection - Fatal编程技术网

C# datagridview c键盘上的多项选择

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

我需要为datagridview创建一些键盘快捷键。 我需要允许用户不使用鼠标选择多行。e、 g.在windows资源管理器中,您可以: 按住Ctrl键并首先选择 向上/向下移动到下一个选择 空间选择其他人。
这在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是的,我是指非连续行。