powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Копирование из одного treeview в другой
5 сообщений из 5, страница 1 из 1
Копирование из одного treeview в другой
    #40096554
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть 2 treeview: 1й - основной, 2й - втростепенный, из 2го в 1й перекидываем через drag&drop элементы дерева(как узды, так и дочерние). Так вот, у меня происходит перемещение элементов дерева, а не их копирование.
Как сделать чтобы копировались?
Как сделать, что б можно было перемещать дочерние элементы из одного узла в любой другой в любую позицию другого узла?
Как сделать, что бы можно было засунуть назад вытащеный за пределы узла дочерний элемент?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
//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
...
Рейтинг: 0 / 0
Копирование из одного treeview в другой
    #40098525
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TreeView это элемент управления, который отображает данные. Не нужно ничего копировать из него в кого то еще.
Копирование данных должно происходить в слое представления данных и слое данных, или других низкоуровневых слоях, в зависимости от того какой "шаблон" вы используйте.
А в слое представления (в интерфейсе), нужно просто обновить элементы управления к актуальному состоянию, после такого копирования.
...
Рейтинг: 0 / 0
Копирование из одного treeview в другой
    #40101100
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes,

Но, на секунду, взаимодействие идёт с интерфейсом сначало, а потом уже обработка этих действий нижними слоями. Следовательно, необходимо делать сначала визуализацию, а затем уже обрабатывать, то что натворили
...
Рейтинг: 0 / 0
Копирование из одного treeview в другой
    #40101212
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackeAngel
Roman Mejtes,

Но, на секунду, взаимодействие идёт с интерфейсом сначало, а потом уже обработка этих действий нижними слоями. Следовательно, необходимо делать сначала визуализацию, а затем уже обрабатывать, то что натворили


Это только юзеру может казаться, что сначало так, но выше Roman Mejtes уже по-моему доступно объяснил
...
Рейтинг: 0 / 0
Копирование из одного treeview в другой
    #40101665
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackeAngel
Roman Mejtes,

Но, на секунду, взаимодействие идёт с интерфейсом сначало, а потом уже обработка этих действий нижними слоями. Следовательно, необходимо делать сначала визуализацию, а затем уже обрабатывать, то что натворили


Ты все правильно говоришь, товарищи там совсем не в теме.
Посмотри тут
Сам недавно делал перетаскивание и копирование узлов. Но не на шарпах к сожалению.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Копирование из одного treeview в другой
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]