Работа с TreeViewer

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

kyzma
Новичок
Новичок
Аватара пользователя
 
Сообщения: 33
Зарегистрирован: 29.10.2004 (Пт) 12:42
Откуда: Москва

Работа с TreeViewer

Сообщение kyzma » 05.11.2004 (Пт) 19:43

Как задать узлу дерева одну картинку, а его дочерням веткам другую (причем мы не знаем сколько их будет и не можем обратиться к каждой п имени).
У меня получается только задать всем элементам сразу, что меня не устраивает :cry:
Может кто подскажет :!: :?:
kyzma

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 09.11.2004 (Вт) 9:04

код в студию, так не понять..
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

kyzma
Новичок
Новичок
Аватара пользователя
 
Сообщения: 33
Зарегистрирован: 29.10.2004 (Пт) 12:42
Откуда: Москва

Вот код...

Сообщение kyzma » 09.11.2004 (Вт) 16:49

Код: Выделить всё
Dim di As System.IO.DirectoryInfo
Dim fsi() As System.IO.FileSystemInfo
Dim str As String
Me.FolderBrowserDialog1.ShowNewFolderButton = False

If Not Me.FolderBrowserDialog1.ShowDialog = DialogResult.Cancel Then
str = Me.FolderBrowserDialog1.SelectedPath()

Try
di = New System.IO.DirectoryInfo(str)
fsi = di.GetFileSystemInfos("*.jpg") 'В папке смотрим только картини
Catch s As System.IO.DirectoryNotFoundException
MsgBox("Каталог не существует")
Exit Sub
End Try

Dim folder As TreeNode = New TreeNode(di.FullName) 'Создаем ветку название папки
Dim info As System.IO.FileSystemInfo

For Each info In fsi
folder.Nodes.Add(info.Name) 'Имена файлов как отростки
Next

Me.TreeView1.Nodes.Add(folder) ' Выводим на экран
End If


1)Хотелось бы чтобы у папки была своя иконка, а у файлов *.jpg своя.
2)Елементы дерева (файлы) можно было как-то сортировать, а то они выводяться не по порядку.
3)При открыти выделялся бы первый элемент (как заставить выделиться i-ый элемент)
Информации по этим вопросам я ненашел.... все в основном сводиться
к добавлению и удалению веток.
kyzma

mad_Max
Бывалый
Бывалый
 
Сообщения: 203
Зарегистрирован: 15.09.2002 (Вс) 21:17
Откуда: Russia, Cherepovets

Сообщение mad_Max » 09.11.2004 (Вт) 22:07

1. Своя иконка для *.jpg:
Код: Выделить всё
...
Dim tmpNode as TreeNode
For Each info In fsi
  tmpNode = New TreeNode(info.Name)
  tmpNode.ImageIndex = jpgImageIndex
  folder.Nodes.Add(tmpNode) 'Имена файлов как отростки
Next
...

Здесь jpgImageIndex - индекс картинки для jpg файлов.
2. Сортировка:
Код: Выделить всё
Array.Sort(fsi)

Делаьб естественно до заполнения TreeView1 из fsi
3. Выделить k-тый элемент:
Код: Выделить всё
TreeView1.SelectedNode = TreeView1.Nodes(k)

Кажись должно работать.

kyzma
Новичок
Новичок
Аватара пользователя
 
Сообщения: 33
Зарегистрирован: 29.10.2004 (Пт) 12:42
Откуда: Москва

По поволу сортировки и выделения...

Сообщение kyzma » 09.11.2004 (Вт) 23:02

За иконки ОГРОМНОЕ спасибо, сам бы не разобрался!
Попутно возникло несколько вопросов/коментариев:

Где должна быть сортировка
Код: Выделить всё
Array.Sort(fsi)
? Ведь мы не заносим файлы в массив? И ещё по какому признаку будут сортироваться данные (имя, размер) и можно ли их менять?

Код: Выделить всё
TreeView1.SelectedNode = TreeView1.Nodes(k)

Может я что не так написал, но выделяется дерево, а оно у нас и так одно...
kyzma

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 10.11.2004 (Ср) 10:35

TreeView1.Nodes(k).Selected = True

Сортировать придётся в строчный массив загонять.... мож ещё какие методы есть
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

kyzma
Новичок
Новичок
Аватара пользователя
 
Сообщения: 33
Зарегистрирован: 29.10.2004 (Пт) 12:42
Откуда: Москва

Так тоже не выйдет.

Сообщение kyzma » 10.11.2004 (Ср) 16:47

TreeView1.Nodes(k).Selected = True не получится так как
у Nodes нет операции Selected.... есть
TreeView1.Nodes(k).IsSelected=True но запись показывается ошибочной "Property 'IsSelected' is 'ReadOnly'
Так что вот так :?
kyzma

mad_Max
Бывалый
Бывалый
 
Сообщения: 203
Зарегистрирован: 15.09.2002 (Вс) 21:17
Откуда: Russia, Cherepovets

Сообщение mad_Max » 11.11.2004 (Чт) 22:37

Мда, оплошал я насчет сортировки... Ведь у массива fsi тип элементов FileSystemInfo, и как его отсортировать интерфейс IComparer не знает. Но ведь у TreeView есть свойство Sorted, по умолчанию равное False. Таким образом достаточно сделать TreeView1.Sorted = True и все. Теперь насчет выделения элемента. Поскольку у тебя корневой элемент (папка с файлами) только один, то он имеет индекс 0, а все файлы - элементы более низкого уровня по иерархии с индексами от 0 до n-1 где n - число файлов. И правильно выделить элемент-файл с индексом k можно так:
Код: Выделить всё
TreeView1.SelectedNode = TreeView1.Nodes(0).Nodes(k)

kyzma
Новичок
Новичок
Аватара пользователя
 
Сообщения: 33
Зарегистрирован: 29.10.2004 (Пт) 12:42
Откуда: Москва

Получилось! :sunny:

Сообщение kyzma » 12.11.2004 (Пт) 14:44

Всё получилось, ВСЕМ ОГРОМНОЕ СПАСИБО!!!
kyzma


Вернуться в Visual Basic .NET

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 67

    TopList  
cron