从 DataGridView 控件 托放数据 到 TreeView控件

时间:2010-02-21 09:37:20  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:  :    1private void dataGridView1_MouseDown(object sender, MouseEventArgs e)    2 {    3 if (e.Button == MouseButtons.Right)    4 {    5 DataGridView.HitTestInfo info = dataGridView1.HitTest(e.X, e.Y);    6    7 if (info.RowIndex >= ...
  正文:实现方法,在datagridview的mousedown事件中开始 托放。
  然后在treeview 的 DragEnter 中接收托放。
  最后在treeview的 DragDrop 中处理托放结果。
  注:treeview的allowdrop属性要设置为 true。
  :
   1private void dataGridView1_MouseDown(object sender, MouseEventArgs e)
   2 {
   3 if (e.Button == MouseButtons.Right)
   4 {
   5 DataGridView.HitTestInfo info = dataGridView1.HitTest(e.X, e.Y);
   6
   7 if (info.RowIndex >= 0)
   8 {
   9 DataGridViewRow dr = (DataGridViewRow)
  10 dataGridView1.Rows[info.RowIndex];
  11 if (dr != null)
  12 dataGridView1.DoDragDrop(dr, DragDropEffects.Copy);
  13 }
  14 }
  15 }
  16
  17 private void treeView1_DragEnter(object sender, DragEventArgs e)
  18 {
  19 e.Effect = DragDropEffects.Copy;
  20 }
  21
  22 private void treeView1_DragDrop(object sender, DragEventArgs e)
  23 {
  24 if (e.Data.GetDataPresent(typeof(DataGridViewRow)))
  25 {
  26 Point p = treeView1.PointToClient(new Point(e.X, e.Y));
  27 TreeViewHitTestInfo index = treeView1.HitTest(p);
  28
  29 if (index.Node != null)
  30 {
  31
  32 DataGridViewRow drv = (DataGridViewRow)e.Data.GetData(typeof(DataGridViewRow));
  33 index.Node.Text = "Drop: " + drv.Cells[0].ToString();
  34
  35 }
  36 }
  37 }
  前面已经实现了从 DataGridView 拖放数据到 TreeView.
  不过拖放是通过 鼠标右键完成的. 根据windows的一般标准,是通过鼠标左键来进行数据拖放操作的.
  像windows资源管理器,既能处理鼠标左键单机的选择,也能处理左键拖放操作.
  这个怎么实现?
  前面我们只处理了 DataGridView 的mousedown事件, 现在要处理 mousedown, mousemove, mouseup这三个事件来完成这个任务.
  大致过程如下:
  
  在MouseDown事件里面和之前一样处理,只是不启动拖放操作.
  而是保存要拖放的数据, 以及建立一个小的矩形框(根据系统DragSize信息).
  
  然后在 MouseMove 事件里面判断
  是否已经准备好拖放了,如果准备好了,就启动拖放操作.
  (注:鼠标在小矩形框范围内的移动不启动拖放操作)
  
  MouseUp里面清除哪些标记量.
  
  这样就能处理左键单击的选择和 左键拖放了.
  代码如下:
  private void dataGridView1_MouseDown(object sender, MouseEventArgs e)
   {
   if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
   {
   DataGridView.HitTestInfo info = dataGridView1.HitTest(e.X, e.Y);
  
   if (info.RowIndex >= 0)
   {
   dragData = (DataGridViewRow)
   dataGridView1.Rows[info.RowIndex];
  
   Size dragSize = SystemInformation.DragSize;
   dragBoxFromMouseDown = new Rectangle(new Point(e.X - (dragSize.Width / 2),
   e.Y - (dragSize.Height / 2)), dragSize);
  
   }
   }
  
   }
  
   private void dataGridView1_MouseUp(object sender, MouseEventArgs e)
   {
   //reset
   dragBoxFromMouseDown = Rectangle.Empty;
   dragData = null;
   }
  
   private void dataGridView1_MouseMove(object sender, MouseEventArgs e)

"从 DataGridView 控件 托放数据 到 TreeView控件"由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Programming/aspnet/12850.html


关键字:

关于《从 DataGridView 控件 托放数据 到 TreeView控件》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td