【发布时间】:2017-04-26 14:09:57
【问题描述】:
我为数字键盘创建了一个自定义表单,它实现了以下代码:
private void btn1_Click(object sender, EventArgs e)
{
PressKey(Keys.D1);
}
[DllImport("user32.dll", SetLastError = true)]
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);
public static void PressKey(Keys key)
{
const int KEYEVENTF_EXTENDEDKEY = 0x1;
keybd_event((byte)key, 0x45, KEYEVENTF_EXTENDEDKEY, (UIntPtr)0);
}
我也用过下面的块
protected override bool ShowWithoutActivation
{
get { return true; }
}
它作为记事本、word 或其他编辑器的魅力(也使用基本的 SendKeys 方法),但在我的应用程序中,在我打算使用它(或其他可编辑控件)的网格单元格中,它无法插入值. 我偶然发现它只能插入一个值一次,当单元格不处于编辑模式时,但它有焦点。
任何从一种形式到另一种形式的虚拟键盘实现示例都将受到高度赞赏
【问题讨论】:
-
开始 -> 运行 -> osk.exe。问题已解决,无需代码。
-
感谢科迪,但这不是解决方案。该应用程序将在嵌入了 Windows 7 的 POS 设备上运行,该设备的键盘没有作为小键盘的数字变体,应客户要求
-
我的猜测是您将第一个键发送到具有焦点的单元格,但之后您以某种方式获得了焦点。也许您应该检查焦点在哪里,以及谁接收下一个输入...