社区
C#
帖子详情
ListView上的项我怎么样才能拖放到另外一个项上面去啊?谢谢
chenlm
2003-08-21 04:44:41
ListView上的项我怎么样才能拖放到另外一个项上面去啊?谢谢
...全文
38
2
打赏
收藏
ListView上的项我怎么样才能拖放到另外一个项上面去啊?谢谢
ListView上的项我怎么样才能拖放到另外一个项上面去啊?谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zhulb
2003-08-21
打赏
举报
回复
在进行拖放操作之前,必须要对进行拖放操作的组件的"AllowDrop"属性值设定为"True",因为此属性是确定组件是否可以进行拖放操作的。
zhulb
2003-08-21
打赏
举报
回复
要完成此次的拖放操作,必须处理好三种事件:"ItemDrag"、"DragEnter"、"DragDrop"。其中只有第一种事件是在源组件中触发的,另外二种事件是在目标组件中触发的。其中当用户拖动组件触发"ItemDrag"事件;当拖动数据进入目标组件区域触发"DragEnter"事件;当用户在目标组件区域放置拖动的数据触发"DragDrop"事件。下面就根据拖放操作的操作顺序来详细介绍:
(1).开始"拖"(Drag)操作:
通过"DoDragDrop"方法拉开了拖放操作的第一步。"DoDragDrop"方法的语法为:
DoDragDrop ( object data , DragDropEffects allowedEffects ) ;
其中第二个参数来是说明此次拖放操作最后所要实现的效果,因为拖放操作有时实现的效果是把源组件中的内容"拖"到目标组件中,这种效果就是"Move";有时拖放的效果是在目标组件中加入拖动的数据,对源组件的内容是没有什么影响的,这种效果就是"Copy"。当然无论是"Move"还是"Copy",这都要通过具体的编程来实现,设定这些效果只是告诉操作系统,你进行拖放操作的类型,从而为拖放操作设定特定的图标。此例中实现开始"拖放"操作的具体实现代码如下:
private void treeView1_ItemDrag ( object sender , ItemDragEventArgs e ) { string strItem = e.Item.ToString ( ) ; //开始进行"Drag"操作DoDragDrop ( strItem , DragDropEffects.Copy | DragDropEffects.Move ) ; }
在上面代码中,我们定义的拖放数据类型是字符串,其实拖放的数据类型可以是很多种的,你可以通过修改"DoDragDrop"方法的第一个参数来设定你所要拖放数据类型,譬如:位图或者其他什么。
(2).目标组件允许进行拖放操作:
既然你已经开始进行拖放操作,你还必须告诉你要拖放到的目标组件,要接受你所拖放的数据,"DragEnter"事件正好可以处理。在下列的代码中,我们是通过判断拖放数据类型来确定是否接受拖放,如果是字符串,则可以,否则,则不行。具体代码如下:
private void listView1_DragEnter ( object sender , DragEventArgs e ) { //判断是否目前拖动的数据是字符串,如果是,则拖动符串对目的组件进行拷贝 if ( e.Data.GetDataPresent ( DataFormats.Text ) ) e.Effect = DragDropEffects.Move ; else e.Effect = DragDropEffects.None ; }
(3).获得拖放的字符串,在目标组件中加入相应的内容:
此步的处理过程是十分明确的,要分成二步来进行,首先要得到拖放的字符串,其次是在目标组件中加入以此字符串为标题的项目。当然还要在相应的位置了。下面就是实现这二步操作的具体代码:
private void listView1_DragDrop ( object sender , DragEventArgs e ) { string dummy = "temp" ; //获得进行"Drag"操作中拖动的字符串 string s = ( string ) e.Data.GetData ( dummy.GetType ( ) ) ; s = s.Substring ( s.IndexOf ( ":" ) + 1 ).Trim ( ) ; Position.X = e.X ; Position.Y = e.Y ; Position = listView1.PointToClient ( Position ) ; //在目标组件中加入以此字符串为标题的项目 listView1.Items.Add ( new ListViewItem ( s , 0 ) ) ; }
此致通过对这三个事件的编程,已经完成了由TreeView组件到ListView组件的拖放操作。
三. 由ListView组件到TreeView组件的拖放操作:
由ListView组件到TreeView组件的拖放操作和从TreeView组件到ListView组件相类似,也是通过"ItemDrag"、"DragEnter"、"DragDrop"三个事件来处理的,具体如下:
(1).开始"拖"(Drag)操作:
这和前者没有什么实质上的区别,只是在此次的拖放操作开始之前,多加入了一些逻辑判断,让程序更稳健的允许,实现的代码如下:
private void listView1_ItemDrag ( object sender , ItemDragEventArgs e ) { //判断是否是鼠标右键按动
if ( e.Button == MouseButtons.Right ) return ; int nTotalSelected = listView1.SelectedIndices.Count ;
//判断组件中是否存在项目
if ( nTotalSelected <= 0 ) return ;
IEnumerator selCol = listView1.SelectedItems.GetEnumerator ( ) ; selCol.MoveNext ( ) ;
ListViewItem lvi = ( ListViewItem )selCol.Current ;
string mDir = "" ;
for ( int i = 0 ; i < lvi.SubItems.Count ; i++ )
mDir += lvi.SubItems[ i ].Text + " ," ;
string str = mDir.Substring ( 0 , mDir.Length-1 ) ; if ( str == "" ) return ;
//对组件中的字符串开始拖放操作 listView1.DoDragDrop ( str , DragDropEffects.Copy | DragDropEffects.Move ) ; }
(2).目标组件允许进行拖放操作:
这一步是进行拖放操作最为一致的,除非你所要进行拖放的数据类型有改变,否则,没有必要对源代码进行什么修改,具体如下:
private void treeView1_DragEnter ( object sender , DragEventArgs e ) { //判断是否目前拖动的数据是字符串,如果是,则拖动符串对目的组件进行拷贝 if ( e.Data.GetDataPresent ( DataFormats.Text ) ) e.Effect = DragDropEffects.Copy ; else e.Effect = DragDropEffects.None ; }
(3).获得拖放的字符串,在目标组件中加入相应的内容:
对于进行拖放操作的不同组件,获得其拖放的数据的实现方法是不一样的,在本步骤中也不例外,但总归大同小异,掌握程序设计的步骤和要点,加上探索、研究的精神,这个问题应该能够解决,下面是实现此步骤的程序代码:
private void treeView1_DragDrop ( object sender , DragEventArgs e ) { //获得进行"Drag"操作中拖动的字符串 string dummy = "temp" ; string s = ( string ) e.Data.GetData ( dummy.GetType ( ) ) ; s = s.Substring ( s.IndexOf ( ":" ) + 1 ).Trim ( ) ; Position.X = e.X ; Position.Y = e.Y ; Position = treeView1.PointToClient ( Position ) ; TreeNode DropNode = this.treeView1.GetNodeAt ( Position ) ; //在目标组件中加入以此字符串为标题的项目 if ( DropNode != null ) { TreeNode DragNode = new TreeNode ( s ) ; treeView1.Nodes.Insert ( DropNode.Index+1 , DragNode ) ; } }
我在CSDN参与的3000个帖子
今日偶然翻到,感慨万千 1:申述:版主,是否扣了我的专家分? 2:100分急求,随机输出十个小写字母,但是,要求这十个字母不相同 3:求Sn=a+aa+aaa+…+aaa…a(n个a)之值 4:数组题 望高手帮忙! 5:呵呵,来推荐一下我的网站,本站提供大量当今流行的免费的音乐和免费电影,常用软件、游戏、精美图库下载,希望对网友有帮助!顺便散分! 6:VBA请教怎
ym——Andorid-15k+的面试题。
最近才开的博客,希望大家多多关注,andorid开发也做了3年有余了,也面试很多加企业,借此机会分享一下,我们中遇到过的问题以及解决方案吧,希望能够对正在找工作的andoird程序员有一定的帮助。学完本人博客发表《ym--andorid从零开始教程》+面试题目全理解,年薪18w以上绝对没问题。 特别献上整理过的50道面试题目 1.
listView
的优化方式 重用conve
android面试题大全
本文出自Cym的博客(http://blog.csdn.net/cym492224103),
谢谢
支持! 1.
listView
的优化方式 重用convertView viewHolder static class viewHolder 在列表里面有图片的情况下,监听滑动不加载图片 多个不同布局,可以创建不同的view
移动开发者升职加薪的8
项
技能,现在做Android开发有前途吗
考虑到文章的篇幅问题,我把这些问题和答案以及我多年面试所遇到的问题和一些面试资料做成了PDF文档,如果有需要的朋友可以私信我【面试】免费领取点击这里领取Android面试资料汇总一些面试资料做成了PDF文档,如果有需要的朋友可以私信我【面试】免费领取点击这里领取Android面试资料汇总[外链图片转存中…(img-Mr3tSR5F-1710106491942)][外链图片转存中…(img-py0LrMFu-1710106491942)]
转
转自http://blog.csdn.net/jiangsheng/archive/2006/03/05/615714.aspx为了便于搜索,这里尽可能保留了论坛上讨论的原文,但是这并不表示本人赞同帖子中的表述方式和观点在c++中如何创建
一个
文件? (VC/MFC 基础类)已知IStream *pIStream取道内容,如何将pIStream内容写到
一个
文件中去?http:
C#
110,533
社区成员
642,574
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章