【发布时间】:2009-09-18 09:27:35
【问题描述】:
我目前正在从事一个项目,我的职责是设计一个设计图面,最终用户可以在运行时添加/删除/移动控件。
我遵循了这个教程"Hosting Windows Forms Designers, by Tim Dawson",并且几乎已经实现了我需要的所有功能。
给那些不想阅读教程的人的短篇故事: 我实现了IDesignerHost、IContainer、ISelectionService、IToolboxService 和一些其他界面,创建我的设计表面。我没有在框架中使用System.ComponentModel.Design.DesignSurface,主要是因为我需要一个真正自定义的设计表面。
问题:
我想允许用户将新的Control 从IToolboxService 拖放到IDesignerHost/IContainer。在本教程中,您单击工具箱中的Control,单击设计图面以添加控件。
我发现了什么:
- 有一个内置功能,
自动从
IToolboxService到System.ComponentModel.Design.DesignSurface但如果您从零开始实施 IDesignerHost,它显然无法正常工作。 -
当您使用
Control.DoDragDrop(ToolboxItem)方法,启动拖放:-
IToolboxService.SerializeToolboxItem(ToolboxItem)被调用来序列化项目 -
IToolboxService.IsToolboxItem(object)和IToolboxService.IsSupported(object)被调用以评估是否
可以允许序列化的 ToolboxItem 被丢弃在设计表面上 - 当您删除控件时:
IToolboxService.DeserializeToolboxItem(object serializedObject)被设计图面调用以反序列化被删除的控件。
-
调用
IToolboxService.SetCursor()以了解您是定义自定义光标还是让标准窗口光标。
问题:
我在“我发现了什么”中实现了上面提到的所有内容,但是拖放是错误的:
- 我拖,一切都很好,但是当
徘徊在设计表面,我的
光标在之间闪烁一点
标准光标和
“
DragDropEffects.Copy”样式。 - 当我放下时,什么也没有发生,当我的光标离开设计表面时(在我放下之后),新的
Control被创建并添加到我放下它的地方。
有没有人尝试过我正在做的事情,如果有,您是如何做到的? 有没有人有任何指针/链接/好的建议?
谢谢你=)
【问题讨论】:
-
您好,您解决鼠标闪烁的问题了吗?我也在使用同一个设计器,我遇到鼠标点闪烁,例如我想将控件从工具箱拖到面板,面板在闪烁。
标签: c# drag-and-drop design-time