gpt4 book ai didi

c# - 将键盘输入发送到特定的子控件

转载 作者:行者123 更新时间:2023-11-30 22:06:21 24 4
gpt4 key购买 nike

好的,我会尽量保持快速和切题。

在 C# Winforms 中,我有一个显示数据 GridView 和文本框的 GUI 窗口。基本上我想要做的是,当按下向上箭头键或向下箭头键时,将此输入直接发送到 datagridview,以便在列表中上下移动。如果按下任何其他键,我想将此输入发送到我的文本框。

我试过重写 ProcessCmdKey 方法并根据 keyData 键码设置焦点,但发生的是第一次按键只会设置控件焦点,然后,第二次按键实际上会作用于焦点控件.我希望输入立即起作用,而不会出现一键延迟。

额外的细节:

GUI 类是一个通用类。

希望这是有道理的!如果需要更多详细信息,我将进行编辑谢谢!

最佳答案

这很棘手,DataGridView 很难修补。它具有 ProcessUpKey() 和 ProcessDownKey() 方法,但它们受到保护。您必须覆盖该类并添加公共(public)方法,以便您可以调用它们。您尝试做的事情失败了,因为当您收到键盘消息时,它已经提交给具有焦点的窗口。

无需对现有表单进行大的更改就可以使用的一些狡猾的 hackorama 只是将键盘消息发回,但这次使用 DataGridView 作为目标窗口。将此片段粘贴到您的表单类中:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
if (msg.HWnd != dataGridView1.Handle && (keyData == Keys.Up || keyData == Keys.Down)) {
PostMessage(dataGridView1.Handle, msg.Msg, msg.WParam, msg.LParam);
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}

[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern IntPtr PostMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);

关于c# - 将键盘输入发送到特定的子控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23715452/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com