Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
7 / 7 / 8
Регистрация: 11.04.2012
Сообщений: 87
1

Не перетаскивается выбранная строка на TreeView

27.11.2012, 07:07. Показов 1142. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите мне, пожалуйста, почему происходят такие странные вещи О_О

Есть дерево TreeView и таблица DGV
Из таблицы надо переместить документ в дерево

C#
1
2
3
4
5
6
private void _Events()
        {
            this.treeView.DragEnter += new DragEventHandler(treeView_DragEnter);
            this.treeView.DragDrop += new DragEventHandler(treeView_DragDrop);
            this.rgvDrag.MouseDown += new MouseEventHandler(rgvDrag_MouseDown);
        }
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
private void rgvDrag_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                this.rgvDrag.DoDragDrop(this.rgvDrag.SelectedRows[0].Cells[1].Value.ToString(), DragDropEffects.Copy | DragDropEffects.Move);
            }
        }
 
        private void treeView_DragEnter(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.Text))
            {
                e.Effect = DragDropEffects.Copy;
            }
            else
            {
                e.Effect = DragDropEffects.None;
            }
        }
 
        private void treeView_DragDrop(object sender, DragEventArgs e)
        {
            Point p = treeView.PointToClient(new Point(e.X, e.Y));
            RadTreeNode hoverNode = treeView.GetNodeAt(p.X, p.Y);            
            if (hoverNode == null)
            {
                RadMessageBox.Show("Не выбран узел номенклатуры", "Ошибка", MessageBoxButtons.OK, RadMessageIcon.Error);
                return;
            }
            RadMessageBox.Show(hoverNode.Value.ToString()); // показать IDузла для записи в БД
            //hoverNode.Nodes.Add(e.Data.GetData(DataFormats.Text).ToString());
        }
Если выбрать строку и переместить в дерево, то все отлично работает. НО! Если выбрать строку, которая выбрана в данный момент (в данном случае по рисунку с 11 айдишником), он даже не начинает перемещать строку.
Т.е. если строка не выбрана, он ее легко перемещает и потом выделяет. А если она не выбрана, то вообще на перемещение никак не реагирует. О_О
Миниатюры
Не перетаскивается выбранная строка на TreeView  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.11.2012, 07:07
Ответы с готовыми решениями:

Определить какая строка выбранная в ListView
Подскажите как определить какая строка выбрана в ListView? я использовал код foreach...

Как написать команду, чтобы на экран выводилась выбранная строка?
как написать команду, чтобы выводилась на экран та строка, которую я выберу??? static void...

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

MovieTexture не перетаскивается видео
Странно но не могу прикрепил .mp4 видео к MovieTexture, все делаю как в уроке на ютьюбе( как быть?

2
180 / 180 / 32
Регистрация: 23.11.2012
Сообщений: 344
Записей в блоге: 1
27.11.2012, 08:20 2
А что за интересный грид у вас? Киньте ссылочку плиз.

По теме: скорее всего начинает обрабатываться другое событие мыши (мб выделение строк?). Либо надо его отключить, либо принудительно вызывать Drag.
0
7 / 7 / 8
Регистрация: 11.04.2012
Сообщений: 87
27.11.2012, 08:35  [ТС] 3
По поводу грида: могу кинуть dll на мыло.
По поводу темы: пробовал - такая же непонятная штука происходит. Сделал по-другому и все работает:

C#
1
2
3
4
5
6
7
private void _Events()
        {
            this.gvFiles.MouseDown += new MouseEventHandler(gvFiles_MouseDown);
            this.gvFiles.MouseMove += new MouseEventHandler(gvFiles_MouseMove);
            this.gvFiles.MouseUp += new MouseEventHandler(gvFiles_MouseUp);
            //this.treeView.DragEnter += new DragEventHandler(treeView_DragEnter);
        }
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
Point downPt;
        bool dragging;
 
private void gvFiles_MouseDown(object sender, MouseEventArgs e)
        {
            downPt = e.Location;
        }
 
        private void gvFiles_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                if (!dragging && IsRealDrag(e.Location, downPt))
                {
                    RadElement element = this.gvFiles.ElementTree.GetElementAtPoint(e.Location);
                    GridDataCellElement cell = element as GridDataCellElement;
                    if (cell != null && cell.RowElement is GridDataRowElement)
                    {
                        dragging = true;
                        this.gvFiles.Capture = true;
                        //this.gvFiles.Cursor = Cursors.Hand;
                    }
                }
            }
        }
 
        private void gvFiles_MouseUp(object sender, MouseEventArgs e)
        {
            if (dragging)
            {
                Point p = this.gvFiles.PointToScreen(e.Location);
                p = this.PointToClient(p);
                RadTreeNode hoverNode = treeView.GetNodeAt(p);
                if (hoverNode == null)
                {
                    RadMessageBox.Show("Не выбран узел номенклатуры", "Ошибка", MessageBoxButtons.OK, RadMessageIcon.Error);
                    return;
                }
                RadMessageBox.Show(hoverNode.Value.ToString());
                dragging = false;
            }
        }
 
        private static bool IsRealDrag(Point mousePosition, Point initialMousePosition)
        {
            return (Math.Abs(mousePosition.X - initialMousePosition.X) >= SystemInformation.DragSize.Width) ||
                (Math.Abs(mousePosition.Y - initialMousePosition.Y) >= SystemInformation.DragSize.Height);
        }
1
27.11.2012, 08:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.11.2012, 08:35
Помогаю со студенческими работами здесь

Строка в TreeView
Есть дерево элементов. в таком виде: Первый 0 Второй 0 Третий 0 0 это количество обращений к...

Devexpress. Поле узла TreeList, который перетаскивается, не обновляется в таблице базы данных
Использую - Devexpress. Источником данных является база данных Access; Подключение к базе...

Куда исчезает строка из Node.Data (TreeView)?
Приветствую всех! Просьба не смеяться, что задача банальная и дочитать сообщение до конца. ...

Как в TreeView выделить узел, чтобы подсвеченным был не только сам текст узла, а полностью вся строка с узлом ?
Как в TreeView выделить узел, чтобы подсвеченным был не только сам текст узла(рис 1), а полностью...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru