Listbox多选用OnKeyUp失去焦点

时间:2013-06-30 18:59:48

标签: delphi listbox delphi-5 onkeyup

我有两个列表框,都有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等像弹出框一样工作?

由于

1 个答案:

答案 0 :(得分:2)

处理快捷键的最佳方法是让菜单项处理它们。你说你有一个包含这些动作的弹出菜单。使用菜单项的Shortcut属性将该菜单项与快捷键相关联。

这允许您删除所有手动键盘事件处理并让框架为您执行此操作。这有很多好处。其中最重要的一点是,当密钥发生故障时,事件将会触发,而不是像现在一样,它会上升。

更好的方法是使用在Delphi 5中确实存在的操作。这些操作允许您将单个操作关联,例如复制到剪贴板多个独立的UI元素。例如,该操作可以与主菜单,弹出菜单和快捷键相关联。