110,536
社区成员
发帖
与我相关
我的任务
分享
//lvwBrowser是ListView, tvwCatalog是TreeView
//从lvwBrowser发起的拖动
private void lvwBrowser_ItemDrag(object sender , ItemDragEventArgs e)
{
//判断是否是鼠标右键按动
if (e.Button == MouseButtons.Right)
{
MessageBox.Show("e.Button == MouseButtons.Right");
return;
}
//判断组件中是否存在项目
if (lvwBrowser.SelectedItems.Count <= 0)
{
MessageBox.Show("lvwBrowser.SelectedItems.Count<=0");
return;
}
IList<ListViewItem> dragItemList = new List<ListViewItem>();
foreach (ListViewItem lvi in lvwBrowser.SelectedItems)
{
dragItemList.Add(lvi);
}
//对组件中的字符串开始拖放操作
lvwBrowser.DoDragDrop(dragItemList , DragDropEffects.Copy | DragDropEffects.Move);
}
//从tvwCatalog发起的拖动
private void tvwCatalog_ItemDrag(object sender , ItemDragEventArgs e)
{
DoDragDrop(e.Item , DragDropEffects.Move);
}
//对拖动到tvwCatalog树节点的数据类型的检查
private void tvwCatalog_DragEnter(object sender , DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(TreeNode)) || e.Data.GetDataPresent(typeof(IList<ListViewItem>)))
e.Effect = DragDropEffects.Move;
else
e.Effect = DragDropEffects.None;
}
//拖动到tvwCatalog树节点的事件的处理,检查数据类型区分拖动事件来自lvwBrowser还是tvwCatalog
private void tvwCatalog_DragDrop(object sender , DragEventArgs e)
{
//来自tvwCatalog的拖动事件
if (e.Data.GetDataPresent(typeof(TreeNode)))
{
//获取被拖动树节点数据
TreeNode dragNode = (TreeNode) (e.Data.GetData(typeof(TreeNode)));
Position.X = e.X;
Position.Y = e.Y;
Position = tvwCatalog.PointToClient(Position);
//获取拖动目标树节点
TreeNode dropNode = this.tvwCatalog.GetNodeAt(Position);
//执行数据处理
CatalogBehaviors cb = new CatalogBehaviors(dragNode , dropNode , null);
cb.DragNodes();
}
//来自lvwBrowser的拖动事件
if (e.Data.GetDataPresent(typeof(IList<ListViewItem>)))
{
//获取拖动起始树节点
TreeNode dragNode = (TreeNode)(lvwBrowser.Tag);
//获取被拖动列表项目数据
IList<ListViewItem> dragItemList = (IList<ListViewItem>) (e.Data.GetData(typeof(IList<ListViewItem>)));
Position.X = e.X;
Position.Y = e.Y;
Position = tvwCatalog.PointToClient(Position);
//获取拖动目标树节点
TreeNode dropNode = this.tvwCatalog.GetNodeAt(Position);
//执行数据处理
CatalogBehaviors cb = new CatalogBehaviors(dragNode,dropNode,dragItemList);
cb.DragItems();
}
}
//Drag informations from browser
private void lvwBrowser_ItemDrag_1(object sender , ItemDragEventArgs e)
{
//判断是否是鼠标右键按动
if (e.Button == MouseButtons.Right)
{
MessageBox.Show("e.Button == MouseButtons.Right");
return;
}
//判断控件中是否存在项目
if (lvwBrowser.SelectedItems.Count <= 0)
{
MessageBox.Show("lvwBrowser.SelectedItems.Count<=0");
return;
}
IList<ListViewItem> dragItemList = new List<ListViewItem>();
foreach (ListViewItem lvi in lvwBrowser.SelectedItems)
{
dragItemList.Add(lvi);
}
//对控件中的项目集合开始拖放操作
lvwBrowser.DoDragDrop(dragItemList , DragDropEffects.Move);
}
//Drag a directory from catalog
private void tvwCatalog_ItemDrag_1(object sender , ItemDragEventArgs e)
{
DoDragDrop(e.Item , DragDropEffects.Move);
}
//Check type of data draged
private void tvwCatalog_DragEnter_1(object sender , DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(TreeNode)) || e.Data.GetDataPresent(typeof(List<ListViewItem>)))
e.Effect = DragDropEffects.Move;
else
{
e.Effect = DragDropEffects.None;
}
}
//Drop a directory or informations into another directory
private void tvwCatalog_DragDrop_1(object sender , DragEventArgs e)
{
//来自tvwCatalog的拖动事件
if (e.Data.GetDataPresent(typeof(TreeNode)))
{
//获取被拖动树节点数据
TreeNode dragNode = (TreeNode) (e.Data.GetData(typeof(TreeNode)));
Position.X = e.X;
Position.Y = e.Y;
Position = tvwCatalog.PointToClient(Position);
//获取拖动目标树节点
TreeNode dropNode = this.tvwCatalog.GetNodeAt(Position);
//禁止拖动到自身
if (dragNode == dropNode)
{
MessageBox.Show("Cannot move a directory to itself." , "Notify");
return;
}
//执行UI处理
DragNode(dragNode , dropNode);
//执行数据处理
LINQDAL.MoveDirectory(dragNode.Name , dropNode.Name);
UpdateNode(dropNode);
UpdateBrowser(dropNode);
}
//来自lvwBrowser的拖动事件
if (e.Data.GetDataPresent(typeof(List<ListViewItem>)))
{
//获取拖动起始树节点
TreeNode dragNode = (TreeNode) (lvwBrowser.Tag);
//获取被拖动列表项目数据
IList<ListViewItem> dragItemList = (IList<ListViewItem>) (e.Data.GetData(typeof(List<ListViewItem>)));
Position.X = e.X;
Position.Y = e.Y;
Position = tvwCatalog.PointToClient(Position);
//获取拖动目标树节点
TreeNode dropNode = this.tvwCatalog.GetNodeAt(Position);
//执行UI处理
DragItems(dragNode , dropNode , dragItemList);
//执行数据处理
IList<string> infoIds = new List<string>();
string dirId = dropNode.Name;
foreach (ListViewItem lvi in dragItemList)
infoIds.Add(lvi.SubItems[2].Text);
//执行数据处理
LINQDAL.MoveInformation(infoIds , dirId);
UpdateNode(dropNode);
UpdateBrowser(dropNode);
}
}