【发布时间】:2013-06-30 18:59:47
【问题描述】:
我有两个列表框,并且都带有 Multiselect:=True。我有一个弹出菜单,可将所选项目复制/粘贴到剪贴板/从剪贴板中复制/粘贴。一切按预期工作。
我想添加键盘 CtrlC(复制)和 Ctrl+V(粘贴),但是在选择项目后,然后使用 Ctrl-C,选定的项目全部丢失选择,列表中的第一个项目被选中,它被复制到剪贴板。
我正在使用 KeyPreview 和主窗体 OnKeyUp
if (ssCtrl in Shift) then
begin
case Char(Key) of
'c','C' : puCopyClick(Sender);
'v','V' : puPasteClick(Sender);
end;
Exit;
end;
case Key of
VK_Delete : puDeleteClick(Self);
end;
Exit;
我怎样才能使 Ctrl+C 等像弹出窗口一样工作?
谢谢
【问题讨论】:
-
根据你之前的问题,没有键盘,只有鼠标,所以这个问题没有意义。除此之外,是什么让你选择了
OnKeyUp?那是错误的事件。看看其他应用程序的行为方式。快捷键按下时触发。您希望我们帮助您学习如何正确地完成所有这些工作吗?从您之前的问题来看,您似乎不想做对。 -
@DavidHeffernan 您似乎很多。我没有说没有键盘,我说我是在强迫他们使用鼠标。这样做的原因是我这样做是为了帮助半自动化朋友失败的业务,并且在不到一小时的时间内,我会决定什么是正确的方法来做这个 东西。我已经编程了很长时间,可能在你出生之前,(基于明显傲慢的假设)所以当你只了解 5% 的情况时,请不要提出“正确”教我。
-
当您强制他们使用鼠标时,他们将如何按 CTRL+C?如果您想假设仅通过使用鼠标来更改焦点,那取决于您。但这是一个错误的假设。我不能强迫你以正确的方式去做。如果您认为
OnMouseUp是检测焦点变化的正确方法,那么这取决于您。但我相信你会从敞开心扉接受你错了的可能性中受益。当然,我也可能是错的。我没有所有信息。 -
另外,你开始编程有什么关系。那么如果是在我出生之前呢?我在这里有大约 200k 的代表。这让我对吗?当然不是。我可能会说绝对的垃圾。我经常这样做。你应该根据自己的优点来判断陈述。任何时候有人试图断言他们是对的,因为他们年龄更大,更有经验,我会怀疑。有比我编程更好的青少年,也有绝望的 40 岁老兵。
-
对您在程序中观察到的行为的解释:在您的按键事件处理程序运行之前,控件的内置按键处理程序正在查看按键并尝试选择列表中以 C 开头的项目,这显然是列表中的第一项。之后,您的按键处理程序将新更改的选择复制到剪贴板。
标签: delphi listbox delphi-5 onkeyup