社区
C#
帖子详情
treeview里如何用拖放来更换node的位置?
xiaohefeng
2003-07-16 03:33:37
thanks.
...全文
30
3
打赏
收藏
treeview里如何用拖放来更换node的位置?
thanks.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wd_318
2003-11-02
打赏
举报
回复
好东西,收藏!
xiaohefeng
2003-07-17
打赏
举报
回复
dragdrop.cs的代码如下:
using System ;
using System.Drawing ;
using System.Collections ;
using System.ComponentModel ;
using System.Windows.Forms ;
using System.Data ;
//导入程序中使用的命名空间
public class Form1 : Form
{
private TreeView treeView1 ;
private Point Position = new Point( 0 , 0) ;
// bool lv1_mdown = false ;
private ListView listView1 ;
private System.ComponentModel.Container components = null ;
public Form1 ( )
{
InitializeComponent ( ) ;
//初始化窗体中的各个组件
}
//清除程序中使用到的各种资源
protected override void Dispose ( bool disposing )
{
if ( disposing )
{
if ( components != null )
{
components.Dispose ( ) ;
}
}
base.Dispose ( disposing ) ;
}
private void InitializeComponent ( )
{
ListViewItem listViewItem1 = new ListViewItem ( "Item01" ) ;
ListViewItem listViewItem2 = new ListViewItem ( "Item02" ) ;
treeView1 = new TreeView ( ) ;
listView1 = new ListView ( ) ;
SuspendLayout ( ) ;
//此属性必须设定为"真",这样才能进行拖放操作
treeView1.AllowDrop = true ;
treeView1.ImageIndex = -1 ;
treeView1.Location = new Point ( 48 , 40 ) ;
treeView1.Name = "treeView1" ;
//在TreeView组件中加入初始化的节点
treeView1.Nodes.Add ( new TreeNode ( "节点01" ) );
treeView1.Nodes.Add ( new TreeNode ( "节点02" ) );
treeView1.SelectedImageIndex = -1 ;
treeView1.Size = new Size ( 121 , 144 ) ;
treeView1.TabIndex = 0 ;
treeView1.DragEnter += new DragEventHandler ( treeView1_DragEnter ) ;
treeView1.ItemDrag += new ItemDragEventHandler ( treeView1_ItemDrag ) ;
treeView1.DragDrop += new DragEventHandler ( treeView1_DragDrop ) ;
//此属性必须设定为"真",这样才能进行拖放操作
listView1.AllowDrop = true ;
//在ListView组件中加入项目
listView1.Items.Add ( listViewItem1 ) ;
listView1.Items.Add ( listViewItem2 ) ;
listView1.Location = new Point ( 208 , 40 ) ;
listView1.Name = "listView1" ;
listView1.Size = new Size ( 121 , 144 ) ;
listView1.TabIndex = 2 ;
listView1.View = View.List ;
listView1.DragDrop += new DragEventHandler ( listView1_DragDrop ) ;
listView1.DragEnter += new DragEventHandler ( listView1_DragEnter ) ;
listView1.ItemDrag += new ItemDragEventHandler ( listView1_ItemDrag ) ;
AutoScaleBaseSize = new Size ( 6 , 14 ) ;
ClientSize = new Size ( 376 , 237 ) ;
Controls.Add ( listView1 );
Controls.Add ( treeView1 );
this.MaximizeBox = false ;
this.MinimizeBox = false ;
this.Name = "Form1" ;
this.Text = "全面掌握C#中的拖放操作" ;
this.ResumeLayout ( false ) ;
}
static void Main ( )
{
Application.Run ( new Form1 ( ) ) ;
}
private void treeView1_ItemDrag ( object sender , ItemDragEventArgs e )
{
string strItem = e.Item.ToString ( ) ;
//开始进行"Drag"操作
DoDragDrop ( strItem , DragDropEffects.Copy | DragDropEffects.Move ) ;
}
private void listView1_DragEnter ( object sender , DragEventArgs e )
{
//判断是否目前拖动的数据是字符串,如果是,则拖动符串对目的组件进行拷贝
if ( e.Data.GetDataPresent ( DataFormats.Text ) )
e.Effect = DragDropEffects.Move ;
else
e.Effect = DragDropEffects.None ;
}
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 ) ) ;
}
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 ) ;
}
private void treeView1_DragEnter ( object sender , DragEventArgs e )
{
//判断是否目前拖动的数据是字符串,如果是,则拖动符串对目的组件进行拷贝
if ( e.Data.GetDataPresent ( DataFormats.Text ) )
e.Effect = DragDropEffects.Copy ;
else
e.Effect = DragDropEffects.None ;
}
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 ) ;
}
}
}
xiaohefeng
2003-07-17
打赏
举报
回复
1.设置AllowDrop=true;
2.在ItemDrag事件中,执行DoDragDrop();如:
if(e.Button==MouseButtons.Left)
(sender as Control).DoDragDrop(e.Item, DragDropEffect.All);
3.响应DragEnter或者DragOver事件;如:
在DragOver事件中:
if(e.Effect!=DragDropEffects.None)
e.Effect = (e.KeyState & 8)==8 ? DragDropEffects.Copy :
DragDropEffects.Move;
TreeView tv = sender as TreeView;
TreeNode node = tv.GetNodeAt(tv.PointToClient(new Point(e.X, e.Y)));
if(node != null)
tv.SelectNode = node;
4.在DragDrop事件中:
TreeNode node = (TreeNode)e.Data.GetData(typeof(TreeNode));
if(e.Effect == DragDropEffects.Move)
node.Remove();
else
node = (TreeNode)node.Clone();
TreeView tv = sender as TreeView;
if(tv.SelectNode != null)
tv.SelectNode.Nodes.Add(node);
else
tv.SelectedNode = node;
如果你想用现成的控件的话可以用我已写好的,在这里:
http://www.diyinside.com/kefroth/wincontrols.zip
从新手小白进入WinForm编程 (VS2019)
WinForm框架 是 Windows Form 的简称,是美国微软公司Microsoft开发基于 .NET Framework 平台的桌面运用程序框架,一般使用 C#语言 编写。 WinForm框架可用于设计窗体和可视控件,采用面向对象语言C#,可快速...
c#关于listview
treeview
的相互
拖放
随着桌面系统的推出,利用鼠标的
拖放
(Drag and Drop) 操作由于其简单、直接,受到了越来越多的读者的欢迎,为迎合这种趋势,越来越多程序员在自己的程序中使用了
拖放
操作。
拖放
操作方便了程序的使用者,但由于 ...
Treeview
的
Node
拖动
Node
节点移动
Treeview
的
Node
拖动
Node
节点
位置
移动并重新排序存储。 关键代码: private void
treeView
1_DragDrop(object sender, DragEventArgs e)//拖动 { //获得
拖放
中...
C#/Winform 节点
拖放
-
TreeView
控件
TreeView
的节点
拖放
:通过新建DragableTree类,类中包含ItemDrag、DragDrop、DragOver、DragLeave和修改节点颜色的方法
treeview
中节点
拖放
实现
Tree
Node
node
=
treeView
1.Top
Node
; while(
node
!= null) { //检查鼠标坐标是否包含在这个节点内部 if(
node
.Bounds.Contains(pt)) { return
node
; } //获取下一个可见的节点
node
=
node
....
C#
110,533
社区成员
642,574
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章