0

我想将按键发送到 SysDateTimePick32 通用控件。

想象以下场景:有一个多行多列的表格,是用户绘制的。当您在其中一列中点击“Enter”时,将创建一个 SysDateTimePick32 控件并将其放置到当前单元格中,以便您可以为该单元格的实际内容选择一个时间。这很好用,但我想让用户在不先按 Enter 的情况下开始编辑时间。

这意味着:表格处于“显示”模式并选择了一个单元格。目前还没有 SysDateTimePick32 控件。用户键入例如“3”,而不是按回车键(因此创建并显示 SysDateTimePick32)。现在应该创建并显示一个 SysDateTimePick32,并且应该将之前键入的“3”发送给它,就像用户按“enter”然后按“3”一样。

我正在努力

SendMessage(sysDateTimePick32Handle, WM_KEYDOWN, '3', MAKELPARAM (1, 0));

但是,这似乎不起作用。将特定击键发送到 Win32 控件,尤其是 SysDateTimePick32 的“干净”方式是什么?

4

1 回答 1

1

发送这样的击键充满了熊陷阱。目前尚不清楚为什么它不起作用,尽管它是错误的方式。WM_KEYDOWN 已发布,而不是发送,因此您应该使用 PostMessage() 代替。对于键入诸如“3”之类的键,您应该发送 WM_CHAR,从而使您免于正确设置修饰键状态(Shift、Ctrl、Alt)的麻烦,并将活动键盘布局作为故障模式删除。如果这不合适,请支持 SendInput()。

请考虑使这更容易的不那么老套的方法。当焦点进入单元格时,总是创建选择器。当您发现没有输入任何内容时,销毁或忽略它。

于 2013-01-22T13:13:25.660 回答