перемещение node'ов в TreeView

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Chuvak
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 102
Зарегистрирован: 11.03.2003 (Вт) 8:39
Откуда: Russia, Ozёrsk

перемещение node'ов в TreeView

Сообщение Chuvak » 06.05.2003 (Вт) 11:03

допустим есть дерево в TreeView:
Код: Выделить всё

1
  11
  12
  13
  14
  15
2
3
4


надо при нажатии на кнопку переместить узел, например, "14" выше
т.е., чтобы стало так:
Код: Выделить всё
1
  11
  12
  14
  13
  15
2
3
4


как это можно сделать?

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 06.05.2003 (Вт) 11:11

Вот так примерно:



Код: Выделить всё

Public Sub tvMoveTreeItem(Optional direction As String = "DOWN")
Dim st As String
Dim ndx As Node
Dim vname, vkey, vimage, vimagesel As String
If tvXML.SelectedItem Is Nothing Then Exit Sub
If tvXML.Nodes.Count = 1 Then Exit Sub

Select Case direction
Case "UP":
If tvXML.SelectedItem.Previous Is Nothing Then Exit Sub
vkey = tvXML.SelectedItem.Key
vimage = tvXML.SelectedItem.Image
vname = tvXML.SelectedItem.Text
vimagesel = tvXML.SelectedItem.SelectedImage
st = tvXML.SelectedItem.Previous.Key
tvXML.Nodes.Remove tvXML.SelectedItem.Key
Set ndx = tvXML.Nodes.Add(st, tvwPrevious, vkey, vname, vimage, vimagesel)
Set tvXML.SelectedItem = ndx
Case "DOWN":
If tvXML.SelectedItem.Next Is Nothing Then Exit Sub
vkey = tvXML.SelectedItem.Key
vimage = tvXML.SelectedItem.Image
vimagesel = tvXML.SelectedItem.SelectedImage
vname = tvXML.SelectedItem.Text
st = tvXML.SelectedItem.Next.Key
tvXML.Nodes.Remove tvXML.SelectedItem.Key
Set ndx = tvXML.Nodes.Add(st, tvwNext, vkey, vname, vimage, vimagesel)
Set tvXML.SelectedItem = ndx
End Select
End Sub

Chuvak
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 102
Зарегистрирован: 11.03.2003 (Вт) 8:39
Откуда: Russia, Ozёrsk

Сообщение Chuvak » 06.05.2003 (Вт) 11:37

так-то всё ништяк, а вот если дерево такое:
Код: Выделить всё
1
  11
      111
      111
  12
      121
      122
      123
  13
      131
  14
      141
      142
  15
      151
2
3
4


короче, если у узлов есть вложенные узлы

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 06.05.2003 (Вт) 11:40

Я эту проблему тоже решил ;) Мог если надо код послать по почте потому что он длинный очень :)

Chuvak
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 102
Зарегистрирован: 11.03.2003 (Вт) 8:39
Откуда: Russia, Ozёrsk

Сообщение Chuvak » 06.05.2003 (Вт) 11:42

буду ждать

Chuvak
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 102
Зарегистрирован: 11.03.2003 (Вт) 8:39
Откуда: Russia, Ozёrsk

Сообщение Chuvak » 06.05.2003 (Вт) 12:45

реальное спасибо

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 06.05.2003 (Вт) 13:19

Код довольно сумбурен :) Но разобраться можно. Если вопросы будут то пиши.

Chuvak
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 102
Зарегистрирован: 11.03.2003 (Вт) 8:39
Откуда: Russia, Ozёrsk

Сообщение Chuvak » 06.05.2003 (Вт) 13:31

одна проблема появилась при перемещении узла без вложений

Код: Выделить всё
  If vkey Like "KEY*" Then
    Set ndx = var_TreeView.Nodes.Add(st, tvwNext, vkey, vname, vimage)
  Else
    Set ndx = var_TreeView.Nodes.Add(st, tvwNext, vkey, vname, vimage)' в этой строке
  End If


пишет ошибку "Element not found"

AndyGee
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 03.02.2003 (Пн) 10:37
Откуда: Kyrgyzstan

Сообщение AndyGee » 06.05.2003 (Вт) 14:05

А можно мне этот код, пожалуйста!
andygee@aub.kg

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 06.05.2003 (Вт) 14:52

Я думаю, можно просто поставить On error resume next и забить :)

Chuvak
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 102
Зарегистрирован: 11.03.2003 (Вт) 8:39
Откуда: Russia, Ozёrsk

Сообщение Chuvak » 07.05.2003 (Ср) 5:56

всё, я разобрался, всё пашет


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 60

    TopList