Создание эффекта «наведения мыши» на узле VB TreeView - PullRequest
0 голосов
/ 02 мая 2011

Узлы элемента управления TreeView не имеют свойства mouse over для проверки. Я надеялся «выделить» узел (чтобы дать пользователю обратную связь, на котором он выбран).

Например, когда событие MouseMove срабатывает на элементе управления TreeView, я могу установить объект узла на то, что "HitTest" возвращает:

Set nde = trvChoices.HitTest(x, y * 15)

Я ищу способ, чтобы этот узел "подсвечивался" (или что-то в этом роде), когда указатель мыши находится над ним, чтобы дать пользователю обратную связь о том, какой узел в TreeView выбран. Да, я использую TreeView как меню, вызываемое правой кнопкой мыши. Я не хочу использовать другой элемент управления, хотя, возможно, мне придется ...

Ответы [ 2 ]

2 голосов
/ 03 мая 2011

Легко было получить узел, который будет Bold при наведении курсора.Тем не менее, установка BackColor или ForeColor на любой цвет, например, wdYellow будет просто затемнять весь узел ...

Публикация примера кода на случай, если кто-то столкнется с этим:

    Private Sub trvChoices_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)

    If Not (trvChoices.HitTest(x, y * 15) Is Nothing) Then

        Dim nde As Node
        Set nde = trvChoices.HitTest(x, y * 15)

        'I have three nodes only, but the proper way would be to loop through the trvChoices and set      each node to Bold = False
        trvChoices.Nodes(1).Bold = False
        trvChoices.Nodes(2).Bold = False
        trvChoices.Nodes(3).Bold = False

        nde.Bold = True

        Set nde = Nothing
    End If

End Sub
0 голосов
/ 19 октября 2015

Я пытался заставить OLEDragDrop работать с Treeview и Listview и столкнулся с проблемой, когда StartDrag пытался перебрать элемент, который был активен в Treeview, прежде чем пользователь запустил StartDrag, а не пункт, который они пытались переместить. Я видел решения в других местах, которые требовали от пользователя нажатия на элемент перед перетаскиванием, но это было нелогично. Слегка изменив код, я смог установить элемент под мышью в качестве активного элемента, который:
(а) дает обратную связь пользователю и
(б) заставляет OLEDragDrop работать правильно.

Private Sub trvChoices_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)

  If Not (trvChoices.HitTest(x * 15, y * 15) Is Nothing) Then

    Dim nde As node
    Set nde = trvChoices.HitTest(x * 15, y * 15)

    nde.Selected = True

    Set nde = Nothing
  End If

End Sub
...