Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Копирование из одного treeview в другой

Ответить
Настройки темы
.NET - Копирование из одного treeview в другой

Аватара для blackeangel

Старожил


Сообщения: 322
Благодарности: 3

Профиль | Отправить PM | Цитировать


Есть 2 treeview: 1й - основной, 2й - втростепенный, из 2го в 1й перекидываем через drag&drop элементы дерева(как узды, так и дочерние). Так вот, у меня происходит перемещение элементов дерева, а не их копирование.
Как сделать чтобы копировались?
Как сделать, что б можно было перемещать дочерние элементы из одного узла в любой другой в любую позицию другого узла?
Как сделать, что бы можно было засунуть назад вытащеный за пределы узла дочерний элемент?
Код: Выделить весь код
//Treeview 1
            this.ETPTreeView.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.treeView_ItemDrag);
            this.ETPTreeView.DragEnter += new System.Windows.Forms.DragEventHandler(this.treeView_DragEnter);
            this.ETPTreeView.DragDrop += new System.Windows.Forms.DragEventHandler(this.treeView_DragDrop);
            this.ETPTreeView.DragOver += new System.Windows.Forms.DragEventHandler(this.treeView_DragOver);
            this.ETPTreeView.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.ETPTreeView_AfterCheck);
            this.ETPTreeView.AfterCollapse += new System.Windows.Forms.TreeViewEventHandler(this.ETPTreeView_AfterCollapse);
            this.ETPTreeView.AfterLabelEdit += new System.Windows.Forms.NodeLabelEditEventHandler(this.ETPTreeView_AfterLabelEdit);
            this.ETPTreeView.NodeMouseClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.ETPTreeView_NodeMouseClick);
            this.ETPTreeView.AfterExpand += new System.Windows.Forms.TreeViewEventHandler(this.ETPTreeView_AfterExpand);
            this.ETPTreeView.MouseDown += new System.Windows.Forms.MouseEventHandler(this.treeView_MouseDown);
            //treeview 2
            this.DonorETPTreeView.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.treeView_ItemDrag);
            this.DonorETPTreeView.MouseDown += new System.Windows.Forms.MouseEventHandler(this.treeView_MouseDown);
            //
        #region treeView
        private void treeView_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            if (Control.ModifierKeys == Keys.Control && e.Button == MouseButtons.Left) 
            {
                ((TreeView)sender).CheckBoxes = true;
            }
        }
        private void treeView_ItemDrag(object sender, System.Windows.Forms.ItemDragEventArgs e)
        {
            DoDragDrop(e.Item, DragDropEffects.All);
        }
        private void treeView_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
        {
            e.Effect = DragDropEffects.All;
        }
        private void treeView_DragOver(object sender, DragEventArgs e)
        {
            Point targetPoint = ((TreeView)sender).PointToClient(new Point(e.X, e.Y));
            ((TreeView)sender).SelectedNode = ((TreeView)sender).GetNodeAt(targetPoint);
        }
        private void treeView_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
        {
            Point pt = ((TreeView)sender).PointToClient(new Point(e.X, e.Y));
            TreeNodeCollection Nodes;
            TreeNode DestinationNode = ((TreeView)sender).GetNodeAt(pt);
            if (DestinationNode == null) Nodes = ((TreeView)sender).Nodes;
            else Nodes = DestinationNode.Nodes;
            if (e.Data.GetDataPresent(typeof(DataGridViewSelectedRowCollection)))
            {
                //string columnName = DataGridView
                foreach (DataGridViewRow dr in (DataGridViewSelectedRowCollection)e.Data.GetData(typeof(DataGridViewSelectedRowCollection)))
                {
                    Nodes.Add(dr.Cells["Материалы"].Value.ToString());
                }
            }
            else if (e.Data.GetDataPresent(typeof(TreeNode)))
            {
                TreeNode NewNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");
                if (DestinationNode == null)
                {
                    TreeNode tempNode = (TreeNode)NewNode.Clone();
                    NewNode.Remove();
                    ((TreeView)sender).Nodes.Add(tempNode);
                }
                else
                {
                    if (DestinationNode.Level < NewNode.Level)
                    {
                        DestinationNode.Nodes.Add((TreeNode)NewNode.Clone());
                        DestinationNode.Expand();
                        NewNode.Remove();
                    }
                    else
                    {
                        // меняем местами
                        if (DestinationNode.Level == NewNode.Level)
                        {
                            TreeNode parent = NewNode.Parent;
                            TreeNode tempNode = (TreeNode)NewNode.Clone();
                            if (parent != null)
                            {
                                parent.Nodes.RemoveAt(NewNode.Index);
                                if (NewNode.Index > DestinationNode.Index) parent.Nodes.Insert(DestinationNode.Index, tempNode);
                                else parent.Nodes.Insert(DestinationNode.Index + 1, tempNode);
                            }
                            else
                            {
                                ((TreeView)sender).Nodes.RemoveAt(NewNode.Index);
                                if (NewNode.Index > DestinationNode.Index) ((TreeView)sender).Nodes.Insert(DestinationNode.Index, tempNode);
                                else ((TreeView)sender).Nodes.Insert(DestinationNode.Index + 1, tempNode);
                            }
                        }
                    }
                }
            }
        }
        #endregion

-------
Забудем боль, забудем страх -
И только ветер в парусах!


Отправлено: 20:40, 09-09-2021

 


Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Копирование из одного treeview в другой

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - Копирование строк из одного файла в другой (excel) maxim43g Скриптовые языки администрирования Windows 4 26-11-2020 16:56
CMD/BAT - Копирование строки из одного файла, и запись его в другой (при условии) Reanosi Скриптовые языки администрирования Windows 2 18-02-2018 22:31
VBA - Экономное копирование накладных из одного листа в другой для печати (Excel) Alexander_88 Microsoft Office (Word, Excel, Outlook и т.д.) 0 26-10-2015 00:31
CMD/BAT - копирование из одного каталога в другой bat файл с помощью параметров terror572 Скриптовые языки администрирования Windows 0 18-03-2014 20:16
Копирование писем из одного ящика в другой ter0pefft Хочу все знать 9 14-11-2011 10:42




 
Переход