我正在尝试在Windows窗体的DataGridView控件中创建快捷方式(CTRL + J)。快捷方式应完全按照向下箭头的方式执行操作(即,在大多数情况下,将选择更改为下一项)。

我试图通过覆盖表单的FormKeyDown事件并使用SendKeys.SendWait("{DOWN}")(如果FormKeyDown接收到J键和Ctrl作为修饰符)来使用CTRL + J。

但是,当我发送{DOWN}键时,它的作用类似于Ctrl + Down,因为用户仍然按住CTRL键!

如何创建自定义快捷方式,使其行为与DataGridView已支持的快捷方式完全相同?

最佳答案

您应该避免依靠SendKeys模仿用户输入,而应使用正确的API进行DataGridView类中可用的程序选择。您可以检查以下页面上的程序选择部分:

Selection Modes in the Windows Forms DataGridView Control

在实现用于程序选择的代码时,您需要考虑为数据网格视图配置的SelectionMode



或者,您可以从DataGridView子类化并实现自定义快捷方式,以便它们重定向到现有的快捷方式。例:

public class MyDataGridView : DataGridView
{
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (keyData == (Keys.Control | Keys.J))
        {
            this.ProcessDownKey(Keys.Down);

            return true;
        }

        return base.ProcessCmdKey(ref msg, keyData);
    }
}

关于c# - 如何为DataGridView创建自定义快捷方式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8314139/

10-13 09:07