加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 将TMenuItem实例分配给另一个实例的EConvertError

发布时间:2020-12-15 09:25:47 所属栏目:大数据 来源:网络整理
导读:在我的一个应用程序中,下拉菜单和弹出菜单共享一些菜单项(动态构建),所以我想我可以使用以下代码将TMenuItem实例添加到两个菜单: MI := TMenuItem.Create(nil);{ set MI action }DropDownMenu.Add(MI);PopupMenu.Items.Add(MI); 错误.我得到了一个EMenuErro
在我的一个应用程序中,下拉菜单和弹出菜单共享一些菜单项(动态构建),所以我想我可以使用以下代码将TMenuItem实例添加到两个菜单:

MI := TMenuItem.Create(nil);
{ set MI action }
DropDownMenu.Add(MI);
PopupMenu.Items.Add(MI);

错误.我得到了一个EMenuError,消息菜单插入了两次. Rational,所以我使用以下代码将代码更改为包含菜单项的两个实例:

MI := TMenuItem.Create(nil);
{ set MI action }
PopupMenu.CreateMenuItem.Assign(MI);
DropDownMenu.Add(MI);

又错了.我收到带有此消息的EConvertError:无法将TMenuItem分配给TMenuItem.我做错了吗?

解决方法

这是一个常见的错误消息. Delphi中的大多数可视组件都不会覆盖TPersistent.Assign.当不覆盖该方法时,默认实现将接管,它只会抛出异常并填充源和目标对象的类名.我认为它没有实现,因为一般来说还不清楚究竟应该复制哪些属性,所以作为程序员,决定权留给你.

如果您创建了正在使用的类的后代,则可以实现Assign或AssignTo来复制所需的所有属性,但这可能不值得.相反,编写一个执行复制的函数可能最简单:

procedure AssignMenuItem(Target,Source: TMenuItem);

对于菜单和按钮,最好的解决方案是使用TAction.分配操作的标题,图标,帮助ID和事件处理程序,然后将该操作与需要具有相同行为的所有按钮和菜单项相关联.他们都可以分享同样的行动.运行时对操作属性的更改将自动反映在关联的可视控件中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读