Проблемка с TreeView

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

Проблемка с TreeView

Сообщение moppuk » 02.03.2006 (Чт) 11:56

Ребят, вопросик есть один...
Помогите пожалуста разобраться как мне например отключить одну ветку из Treeview, а при определенном действии ее активировать. Что-то я не могу сам разобраться...
Заранее огромне спасибо за помощь!!!
С уважением Морозов Николай

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 02.03.2006 (Чт) 12:01

Что значит "отключить"? Сделать невидимо, недоступной, что-то еще?
Весь мир матрица, а мы в нем потоки байтов!

moppuk
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 31.01.2006 (Вт) 23:03

Сообщение moppuk » 02.03.2006 (Чт) 12:12

Извените.... Сделать недоступной...
С уважением Морозов Николай

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

Сообщение RayShade » 02.03.2006 (Чт) 12:23

Я думаю, надо обрабатывать событие treeview_nodeclick, или может treeview_collapse, treeview_expand

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

moppuk
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 31.01.2006 (Вт) 23:03

Сообщение moppuk » 02.03.2006 (Чт) 12:33

да это понятно... что анализирует, что за нода недоступна... Просто выделена серым и до того или иного действия она является недоступна. На подобии того, как с копирование... Пока нет ни чего ф буфере обмена - кнопка вставит недоступна.
Если можно, то с маханьким примерчиком плиз...
С уважением Морозов Николай

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

Сообщение RayShade » 02.03.2006 (Чт) 12:48

Ну, в 6.0 Treeview, нет, проперти Enabled для Node.

Есть только, Visible :)

Не пойдет, решение если чего то там нет, то Node просто не виден? :)

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 02.03.2006 (Чт) 12:53

Для недоступной можно иконку менять, если она есть, конечно.

moppuk
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 31.01.2006 (Вт) 23:03

Сообщение moppuk » 02.03.2006 (Чт) 12:55

нее, блин, такое решение как-то не очень прикольное...
Было бы здорово чтобы какой-то ноде, просто был серого цвета...
Что, ни каких варионтов нет?
С уважением Морозов Николай

moppuk
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 31.01.2006 (Вт) 23:03

Сообщение moppuk » 02.03.2006 (Чт) 13:01

Есль иконка, а как это сделать?
С уважением Морозов Николай

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 02.03.2006 (Чт) 13:18

Enabled влегкую эмулируется через изменение цвета, иллюзия полная:
Код: Выделить всё
Me.TreeView1.SelectedItem.ForeColor = vbGrayText


Ну и плюс соответствующая обработка кликов и раскрытий, разумеется.

moppuk
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 31.01.2006 (Вт) 23:03

Сообщение moppuk » 02.03.2006 (Чт) 13:23

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

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 02.03.2006 (Чт) 13:33

Иконки меняются так:
Код: Выделить всё
        Node.Image = <index>
        Node.SelectedImage = <index>

, где <index> индекс иконки в привязанном ImageList'е.

И как сказал Ennor выделение цветом, плюс обработка событий. И пусть себе кликают на здоровье.

Кстати, кто-нибудь знает как сделать иконки так, чтобы не рисовать отдельно иконки с "недоступной" картинкой, а генерировать их автоматичкески?

moppuk
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 31.01.2006 (Вт) 23:03

Сообщение moppuk » 02.03.2006 (Чт) 13:43

skiperski вот то что ты написал, я вообще не пойму что ты хотел этим до меня довести... Может поподробнее опишешьа... =(
С уважением Морозов Николай

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

Сообщение RayShade » 02.03.2006 (Чт) 13:49

Резюмирую

Берешь, как сказал Ennor, и меняешь цвет.

А потом, как я сказал - обрабатываешь события. Чтоб, и выглядело как дисейблед и не работало так же :)

moppuk
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 31.01.2006 (Вт) 23:03

Сообщение moppuk » 02.03.2006 (Чт) 13:52

Понимаете... Объясняю...
У меня есть ветка, расскрывающаеся... Вот... Плоэтому просто поменять цвет не прокатывает, и собывтия обрабатывать тоже. Т.к. Обраюатывает события уже из расскрывшегося Noda... Мне надо чтобы родитель не позволял показать предков, надпись была серая... Надпись я сделал, да и правдаощущение,что disabled...
С уважением Морозов Николай

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 02.03.2006 (Чт) 14:06

У меня вот это - работает:
Код: Выделить всё
Private Sub TreeView1_Expand(ByVal Node As MSComctlLib.Node)
If Node.ForeColor = vbGrayText Then Node.Expanded = False
End Sub

Я понимаю, что это кривое решение, но события BeforeExpand у дерева, к сожалению, нет.

moppuk
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 31.01.2006 (Вт) 23:03

Сообщение moppuk » 02.03.2006 (Чт) 19:55

Все, респект все... Разобрался. Все заработало.
Спасибо всем кто помогал!!!
С уважением Морозов Николай


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

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

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

    TopList