【发布时间】:2015-02-01 03:13:25
【问题描述】:
我有一个包含两个表单的 MDI 表单应用程序。第一个有一个 StringGrid,第二个表单有很多编辑控件和几个按钮。
我需要从网格中拖放到第二个表单上,并使用第一个表单中 StringGrid 中所选单元格的值更新一个编辑。
如果我事先知道用户将在哪个控件上释放鼠标左键,这很容易做到,因为我可以设置该特定控件的 OnDragDrop 事件。但我不想为第二个表单上的每个控件编写多个 OnDragDrop 事件。
如何拦截表单范围的消息以拦截 ANY 控件上的放置操作?
【问题讨论】:
-
您无需编写单独的
OnDragOver/OnDragDrop事件。将所有接收控件的OnDragOver/OnDragDrop事件设置为指向一个公共处理程序。Sender参数告诉你哪个控件将要接收丢弃,Source参数告诉你 - 好吧,来源。 -
是的,我知道,但我仍然需要手动为每个组件的 onDragDrop 事件分配相同的处理程序。一个可能的解决方案是枚举表单上的所有组件并以编程方式将该处理程序分配给每个组件......但是如果我尝试这样做,我会不断收到无效的类型转换错误
-
@user1566931 枚举控件,而不是组件
标签: delphi drag-and-drop delphi-xe2 drag