Тема: Есть ли у TreeView свойство MultiSelect и если нет, чем его можно заменить?

Здравствуйте!
Такая проблема у меня: надо, чтобы в дереве можно было выделять несколько узлов при нажатом Ctrl, а в идеале - чтобы ещё можно было и с Shift-ом, и мышкой.
Ну, допустим, нажатие Ctrl или Shift можно отлавливать в обработчике таймера, но что делать дальше?...
Пока мне удалось только найти свойство узла .Selected, но он почему-то не помогает. Выделение снимается с узла, если кликнуть на другой узел.

Private Sub TreeView1_NodeClick(ByVal node As MSComctlLib.node)
TreeView1.Nodes(node.key).Selected = True

Есть ещё свойство узла .Checked, но мне не понятно, как его обрабатывать - какое-нибудь событие происходит при переустановке checkbox-a узла?... Кроме того, мне не нравится, что рамочка квадратика этого checkbox-a довольно толстая, режет глаз. Может, как-то можно поменять стиль этого квадратика, или он стандартный?
Буду очень рада любым полезным советам.

Re: Есть ли у TreeView свойство MultiSelect и если нет, чем его можно заменить?

Я так понял, что используется TreeView из MSForms20.dll. Там, я думаю, надо будет поставить свойство CheckBoxes в True, а потом пройтись по всем узлам с проверкой свойства Checked. Но на какое событие вешать такую обработку, я пока не очень понимаю, поскольку на UserForm.Terminate вешать бесполезно, скорее всего. Все на уровне идеи, без проверок!

Re: Есть ли у TreeView свойство MultiSelect и если нет, чем его можно заменить?

У меня была мысль сделать кнопку типа "завершить выбор", и не нее повесить анализ checkbox-ов, но как-то это криво... Тем более, хотелось бы, чтобы при выборе очередного узла, на чертеже происходило нечто, связанное с этим узлом. Поэтому я и интересовалась, какое событие происходит при переключении checkbox-a в TreeView.

Re: Есть ли у TreeView свойство MultiSelect и если нет, чем его можно заменить?

Ну как я понял, у TreeView свойство Selected может быть только у одного узла. Может, попробовать такое (на уровне логики, без кодов):
TreeView_NodeClick(<...>)
И выполняем тут анализ, Checked оно или нет. И в зависимости от этого работаем с файлом так или иначе.
---
Возможно, надо будет вообще отказываться от TreeView в пользу List.

Re: Есть ли у TreeView свойство MultiSelect и если нет, чем его можно заменить?

TreeView_NodeClick(<...>)
И выполняем тут анализ, Checked оно или нет.

   Это было бы хорошо, если бы при переустановке флажка Checked происходило бы событие NodeClick... Всё-таки хотелось бы узнать, кокаое событие происходит при изменении флажка - тогда в ответ на него можно вызвать обработчик NodeClick (как будто щёлкнули по узлу), и сделать всё необходимое.

Re: Есть ли у TreeView свойство MultiSelect и если нет, чем его можно заменить?

А насчёт отказываться от TreeView - никак нельзя... Если только List умеет отбражать деревья :), в чём я сильно сомневаюсь.

Re: Есть ли у TreeView свойство MultiSelect и если нет, чем его можно заменить?

> masha
Дык ета... Там же есть событие

Private Sub TreeView1_NodeCheck(ByVal Node As MSComctlLib.Node)

Почему б с ним не работать?

Re: Есть ли у TreeView свойство MultiSelect и если нет, чем его можно заменить?

Специально провернул - работает, зараза!

Private Sub TreeView1_NodeCheck(ByVal Node As MSComctlLib.Node)
  If Node.Checked Then
    MsgBox Node.Text & " checked"
  Else
    MsgBox Node.Text & " unchecked"
  End If
End Sub

Re: Есть ли у TreeView свойство MultiSelect и если нет, чем его можно заменить?

Ой... :) Как-то я не догадалась проверить...  :)  Спасибо большое-пребольшое!!!