Вопрос

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
xqz_me
Постоялец
Постоялец
 
Сообщения: 413
Зарегистрирован: 04.12.2005 (Вс) 14:58

Вопрос

Сообщение xqz_me » 06.03.2006 (Пн) 16:50

С некоторого устройства (не комп) получается в массив список файлов в таком виде:

4 байта - размер файла
2 байта - аттрибут 1
2 байта - аттрибут 2
стока длиной 1F8h - имя файла

итого размер записи на 1 файл - 200h байт. Количество файлов в устройстве известо. Физических дисков в нём - три штуки (список получается для всех сразу). Путь к файлу прописывается стандартным образом. Задача: С помощью treeview простроить дерево папок. При выделении папки в treeview в таблице отобразить имена файлов в папке, их аттрибуты и размер. Можете помочь, а то я даже не знаю, с чего начать.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.03.2006 (Пн) 17:13

Получить список в массив. Отсортировать по количеству слэшей. Добавлять в дерево подряд, используя в качестве ключа путь папки.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

xqz_me
Постоялец
Постоялец
 
Сообщения: 413
Зарегистрирован: 04.12.2005 (Вс) 14:58

Сообщение xqz_me » 06.03.2006 (Пн) 17:56

Побывал в поиске, нашёл этот обрезанный топик. :(

Вообщем, получить адреса папок не составляет проблем. Проблема в том, что я не знаю как создавать ветки в treeview. Вот например, есть три пути а/folder1/folder2, b/folder3/folder2 и c/folder1/folder2/folder3/folder4, где, например, фолдеры с одинаковыми цифрами имеют одно и то же название. Как для них создать соответствующее дерево? И как при щелчке по ветке определить путь этой ветки?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.03.2006 (Пн) 18:03

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

xqz_me
Постоялец
Постоялец
 
Сообщения: 413
Зарегистрирован: 04.12.2005 (Вс) 14:58

Сообщение xqz_me » 06.03.2006 (Пн) 18:06

Внимательно перечитав сказанное выше. можно сделать много важных выводов... в первую очередь о том, что список отсортировать проблемы не составляет. :D

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.03.2006 (Пн) 18:10

А после того, как список отсортирован по количеству слэшей, можно - вернувшись к внимательному перечитыванию сказанного выше - идти по списку от начала до конца, выполняя каждый раз nodes.add, причём ключом нового нода будет являться сам путь к папке, а ключом родительского нода - путь этой же папки, укороченный на 1 последний слэш...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

xqz_me
Постоялец
Постоялец
 
Сообщения: 413
Зарегистрирован: 04.12.2005 (Вс) 14:58

Сообщение xqz_me » 06.03.2006 (Пн) 20:26

TreeView1.Nodes.Add ([Relative], [Relationship], [Key], [Text], [Image], [Selected image]) - можно пояснить, как этим пользоваться? Я не понял. На примере:
Вот например, есть три пути а/folder1/folder2, b/folder3/folder2 и c/folder1/folder2/folder3/folder4, где, например, фолдеры с одинаковыми цифрами имеют одно и то же название.


И ещё:
И как при щелчке по ветке определить путь этой ветки?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 07.03.2006 (Вт) 4:54

xqz_me
Я тебе всё объяснил. Очень подробно. В деталях. Я не знаю, как это можно не понять.

Код: Выделить всё
  Dim arr(1 To 5) As String, i As Long
 
  arr(1) = "c:"
  arr(2) = "c:\foo"
  arr(3) = "c:\bar"
  arr(4) = "c:\foo\bar"
  arr(5) = "c:\bar\foo"
 
  TreeView1.Nodes.Add , , arr(1), arr(1)
 
  For i = LBound(arr) + 1 To UBound(arr)
    TreeView1.Nodes.Add Left$(arr(i), InStrRev(arr(i), "\") - 1), tvwChild, arr(i), Mid$(arr(i), InStrRev(arr(i), "\") + 1)
  Next


Сравни с тем, что я сказал словами. И подумай, почему ты просишь код несмотря на то, что всё разжёвано. Просто есть категория лиц, всегда поступающих именно так, и я тебя хочу туда отнести. С последующим игнором.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

xqz_me
Постоялец
Постоялец
 
Сообщения: 413
Зарегистрирован: 04.12.2005 (Вс) 14:58

Сообщение xqz_me » 08.03.2006 (Ср) 14:12

И подумай, почему ты просишь код несмотря на то, что всё разжёвано.
Просто есть категория лиц, всегда поступающих именно так, и я тебя хочу туда отнести. С последующим игнором.
ИМХО, подобные заявления были несколько необоснованны. Конкретно, было сказано следующее:
Отсортировать по количеству слэшей. Добавлять в дерево подряд, используя в качестве ключа путь папки.
После чего:
А после того, как список отсортирован по количеству слэшей, можно - вернувшись к внимательному перечитыванию сказанного выше - идти по списку от начала до конца, выполняя каждый раз nodes.add, причём ключом нового нода будет являться сам путь к папке, а ключом родительского нода - путь этой же папки, укороченный на 1 последний слэш...
Что для человека, который сказал:
Я не знаю как создавать ветки в treeview
ни о чём не говорит. Однако же выяснилось, что
Я тебе всё объяснил. Очень подробно. В деталях. Я не знаю, как это можно не понять.
Странно как-то.


За код большое спасибо.
Последний раз редактировалось xqz_me 08.03.2006 (Ср) 14:31, всего редактировалось 2 раз(а).

xqz_me
Постоялец
Постоялец
 
Сообщения: 413
Зарегистрирован: 04.12.2005 (Вс) 14:58

Сообщение xqz_me » 08.03.2006 (Ср) 14:20

И ещё, вопрос
И как при щелчке по ветке определить путь этой ветки?
остался открытым.

Я попробовал сделать так:
Код: Выделить всё
Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
MsgBox Node
End Sub
. Но возвращается только имя текущей ветки. Как получить весь путь, от корня дерева до ветки, по которой щёлкнули.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 08.03.2006 (Ср) 14:47

msgbox node.key - для тех, кто принципиально не пользуется клавишей F2.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

PUNK-GRUNGER
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 10.06.2004 (Чт) 14:22
Откуда: Украина, Николаев

Сообщение PUNK-GRUNGER » 25.04.2006 (Вт) 9:52

xqz_me писал(а):И ещё, вопрос
И как при щелчке по ветке определить путь этой ветки?
остался открытым.


TreeView1.Nodes([INDEX]).FullPath


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

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

Сейчас этот форум просматривают: Google-бот, Majestic-12 [Bot] и гости: 189

    TopList  
cron