日期:2014-05-19  浏览次数:20910 次

WinForm的2个拖放问题
我是在TreeView中实现拖放,那么拖放的是TreeNode.由于我在子类中重写了TreeNode,那么其实际类型其实是MyTreeNode.

1.于是问题出现了,用e.Data.GetDataPresent(typeof(TreeNode))方法或e.Data.GetDataPresent(typeof(TreeNode).FullName,true)方法都无法返回true.请问需要怎么处理?

2.我希望当鼠标拖放时在两个节点之间有一个插入点(可以是一个黑色的横杠),如何实现?

------解决方案--------------------
1、应该是e.Data.GetDataPresent(typeof(MyTreeNode))吧,虽然你已经继承了TreeNode

2、拖放的时候绘制一个横线就是了,没有什么难度吧?

随便说的~~感觉是这样子,根据以往做控件的经验来的

==================================================================
博客空间:http://blog.csdn.net/lovingkiss
资源下载:http://download.csdn.net/user/lovingkiss
Email:loving-kiss@163.com
本人说明: <我的帖子我做主,结贴率保持100%>
优惠接单开发,信誉保证,Q64180940(请清楚注明业务还是技术咨询)
==================================================================
------解决方案--------------------
汗~~但是这样虽然是父子继承关系,但是实际上类别已经改变了阿;

为了体现他们之间的差异阿——如果用typeof出来两个不同的类,反而是一个结果,违反了OOP思想了阿。就算能做到,也不推荐阿;

==================================================================
博客空间:http://blog.csdn.net/lovingkiss
资源下载:http://download.csdn.net/user/lovingkiss
Email:loving-kiss@163.com
本人说明: <我的帖子我做主,结贴率保持100%>
优惠接单开发,信誉保证,Q64180940(请清楚注明业务还是技术咨询)
==================================================================
------解决方案--------------------
你可以这样
Dim myType As Type = myComponent.GetType
然后判断
if myType is ... OrElse myType is Then
...
e.Data.GetDataPresent
...
end if

抱歉,我只会Vb.net的写法,相信你明白我的意思,我就不用自动转换器给你转换了哈~~

==================================================================
博客空间:http://blog.csdn.net/lovingkiss
资源下载:http://download.csdn.net/user/lovingkiss
Email:loving-kiss@163.com
本人说明: <我的帖子我做主,结贴率保持100%>
优惠接单开发,信誉保证,Q64180940(请清楚注明业务还是技术咨询)
==================================================================
------解决方案--------------------
为什么不能按TreeNode来处理?

------解决方案--------------------
这个控件我也没有二次重绘过,不过应该没有问题吧,在Paint里面试验,根据某个状态进行重绘;