Cle*_*man 5 c# design-time drag-and-drop
我目前正在开发一个项目,我的部分是设计一个Design Surface,最终用户可以在运行时添加/删除/移动控件.
我按照本教程"由Tim Dawson主持Windows窗体设计器",几乎已经实现了我需要的所有功能.
短篇小说对于那些谁不想读教程:我实现了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)
调用以评估是否IToolboxService.DeserializeToolboxItem(object serializedObject)
由设计表面调用以反序列化控件.IToolboxService.SetCursor()
被调用以了解您是否定义了自定义光标,或者让标准窗口光标.
我实现了上面提到的所有内容,在"我发现了什么"中,但拖放是错误的:
DragDropEffects.Copy
"样式之间略微闪烁.Control
创建新的并添加到我丢弃它的地方.有没有人试图做我正在做的事情,如果有的话,你是如何管理它的?有没有人有任何指针/链接/好建议?
谢谢=)
有人有任何指针/链接/好的建议吗?
您的问题似乎已通过 Microsoft Connect 问题Mouse Events Consumed/Not Raising in 2.0 Designers得到解决。这个问题很容易理解,但显然从 .NET Framework 1.1 (2003) 到 2.0 (2006) 的升级意味着拖放行为的变化 - 鉴于您提到的文章源于 2003 年,这很可能是相关的。具体来说,您应该向前滚动到第 Issue 2部分,引文:
现在,在表单上拖动时,您会注意到不断闪烁。这部分是由 2.0 中新的拖放行为引起的。
我自己现在无法深入研究这个问题,但您也许还可以从设计器中的自定义拖放中找出一些东西,它解决了 Visual Studio 版本 2003 和 2005 之间有关拖放的行为变化;这很可能是相关的,并且已接受的答案之一实际上具体引用了上面的 Microsoft Connect 问题,而且它还提供了更多可能解决方案的提示。
归档时间: |
|
查看次数: |
3835 次 |
最近记录: |