示例#1
0
        /// <summary>
        /// This event is fired when the user drags over a drag and drop control with the mouse.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void fileSystemTreeView_DragOver(object sender, DragEventArgs e)
        {
            //Console.WriteLine("dragover");

            // Compute drag position and move image
            Point position = this.fileSystemTreeView.PointToClient(new Point(e.X, e.Y));

            DragHelper.ImageList_DragMove(position.X - this.fileSystemTreeView.Left, position.Y - this.fileSystemTreeView.Top);

            // Get actual drop node
            TreeNode dropNode = this.fileSystemTreeView.GetNodeAt(position);

            if (dropNode == null)
            {
                e.Effect = DragDropEffects.None;
                return;
            }

            //if ((e.KeyState & 8) == 8) //ctrl - copy
            //{
            //    ShowToolTip(position.X, position.Y, "Copy to ");
            //}
            //else
            //{
            //    ShowToolTip(position.X, position.Y, "Move to ");
            //}

            e.Effect = DragDropEffects.Move;

            // if mouse is on a new node select it
            if (this.tempDropNode != dropNode)
            {
                DragHelper.ImageList_DragShowNolock(false);
                this.fileSystemTreeView.SelectedNode = dropNode;
                DragHelper.ImageList_DragShowNolock(true);
                tempDropNode = dropNode;
            }

            // Avoid that drop node is child of drag node
            TreeNode tmpNode = dropNode;

            while (tmpNode.Parent != null)
            {
                if (tmpNode.Parent == this.dragNode)
                {
                    e.Effect = DragDropEffects.None;
                }
                tmpNode = tmpNode.Parent;
            }
        }
示例#2
0
        /// <summary>
        /// This event is fired when the user releases the mouse over the drop target.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void fileSystemTreeView_DragDrop(object sender, DragEventArgs e)
        {
            // Unlock updates
            DragHelper.ImageList_DragLeave(this.fileSystemTreeView.Handle);

            Console.WriteLine("drag: {0}", dragNode.Text);
            Point    position = this.fileSystemTreeView.PointToClient(new Point(e.X, e.Y));
            TreeNode dropNode = this.fileSystemTreeView.GetNodeAt(position);

            Console.WriteLine("drop: {0}", dropNode.Text);

            if (this.dragNode != dropNode)
            {
                // node is a drive
                if (this.dragNode.Parent == null)
                {
                }
                // node is a folder
                else
                {
                    try
                    {
                        Directory.Move(this.dragNode.FullPath.Replace(@"\\", @"\"), dropNode.FullPath.Replace(@"\\", @"\") + @"\" + this.dragNode.Text);

                        if (this.dragNode.Parent.Nodes.Count == 1)
                        {
                            this.dragNode.Parent.ImageIndex         = 0;
                            this.dragNode.Parent.SelectedImageIndex = 0;
                            this.dragNode.Parent.StateImageIndex    = 0;
                        }
                    }
                    catch (IOException ex)
                    {
                    }

                    //if ((e.KeyState & 8) == 8) //ctrl - copy
                    //{
                    //    Directory.Copy()
                    //}
                    //else
                    //{
                    //    Directory.Move()
                    //}
                }
            }

            this.dragNode            = null;
            this.scrollTimer.Enabled = false;
            //this.tooltip.Hide(this.fileSystemTreeView);
        }
示例#3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void scrollTimer_Tick(object sender, EventArgs e)
        {
            // get node at mouse position
            Point    pt   = this.fileSystemTreeView.PointToClient(Control.MousePosition);
            TreeNode node = this.fileSystemTreeView.GetNodeAt(pt);

            if (node == null)
            {
                return;
            }

            // if mouse is near to the top, scroll up
            if (pt.Y < 30)
            {
                // set actual node to the upper one
                if (node.PrevVisibleNode != null)
                {
                    node = node.PrevVisibleNode;

                    // hide drag image
                    DragHelper.ImageList_DragShowNolock(false);
                    // scroll and refresh
                    node.EnsureVisible();
                    this.fileSystemTreeView.Refresh();
                    // show drag image
                    DragHelper.ImageList_DragShowNolock(true);
                }
            }
            // if mouse is near to the bottom, scroll down
            else if (pt.Y > this.fileSystemTreeView.Size.Height - 30)
            {
                if (node.NextVisibleNode != null)
                {
                    node = node.NextVisibleNode;

                    DragHelper.ImageList_DragShowNolock(false);
                    node.EnsureVisible();
                    this.fileSystemTreeView.Refresh();
                    DragHelper.ImageList_DragShowNolock(true);
                }
            }
        }
示例#4
0
        //private ImageList imageListDrag = new ImageList();

        /// <summary>
        /// This event is fired as soon as a drag operation is started.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void fileSystemTreeView_ItemDrag(object sender, ItemDragEventArgs e)
        {
            this.dragNode = (TreeNode)e.Item;
            this.fileSystemTreeView.SelectedNode = this.dragNode;
            Console.WriteLine("dragnode: {0}", this.dragNode.Text);

            Bitmap   bmp = new Bitmap(32, 32);
            Graphics gfx = Graphics.FromImage(bmp);

            gfx.DrawImage(this.fileSystemTreeView.ImageList.Images[0], 0, 0);

            Point p  = this.fileSystemTreeView.PointToClient(Control.MousePosition);
            int   dx = p.X + this.fileSystemTreeView.Indent - this.dragNode.Bounds.Left - this.fileSystemTreeView.Location.X;
            int   dy = p.Y - this.dragNode.Bounds.Top - this.fileSystemTreeView.Location.Y;

            if (DragHelper.ImageList_BeginDrag(this.fileSystemTreeView.ImageList.Handle, 0, dx, dy))
            {
                // Begin dragging
                this.fileSystemTreeView.DoDragDrop(bmp, DragDropEffects.Move);
                // End dragging image
                DragHelper.ImageList_EndDrag();
            }
        }
示例#5
0
 /// <summary>
 /// This event is fired when the user leaves the control with the mouse while dragging an element.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void fileSystemTreeView_DragLeave(object sender, EventArgs e)
 {
     Console.WriteLine("dragleave");
     DragHelper.ImageList_DragLeave(this.fileSystemTreeView.Handle);
     this.scrollTimer.Enabled = false;
 }
示例#6
0
 /// <summary>
 /// This event is fired when the user moves the mouse onto the control while dragging an element.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void fileSystemTreeView_DragEnter(object sender, DragEventArgs e)
 {
     Console.WriteLine("dragenter");
     DragHelper.ImageList_DragEnter(this.fileSystemTreeView.Handle, e.X - this.fileSystemTreeView.Left, e.Y - this.fileSystemTreeView.Top);
     this.scrollTimer.Enabled = true;
 }