2011-05-02 63 views
0

TreeView控件的節點沒有「鼠標懸停」屬性進行測試。我希望能夠「突出顯示」節點(向用戶反饋選擇哪個節點)。在VB TreeView節點上創建「鼠標懸停」效果

例如,當在TreeView控制MouseMove事件觸發,我可以設置一個節點對象是什麼「HitTest」回報:

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

我正在尋找一種方式來有這個節點「突出」 (或某物),以便讓用戶反饋選擇TreeView中的哪個節點。是的,我正在使用TreeView作爲「右鍵單擊」菜單。我不希望使用不同的控件,儘管我可能不得不...

回答

2

讓節點在懸停時變爲粗體是一件容易的事情。但是,將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

我一直試圖讓OLEDragDrop有一個TreeView和ListView的工作和有遇到的問題是StartDrag試圖在用戶啓動StartDrag之前嘗試在Treeview中激活的項目,而不是他們嘗試拖動的項目。我曾在其他地方看到要求用戶在拖動之前點擊某個項目的解決方案,但這是違反直覺的。通過稍微修改您的代碼,我可以將鼠標下的項目設置爲活動項目:
(a)向用戶給出反饋,並且
(b)使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 
+0

如果你還在那裏......你能解釋爲什麼你將x和y座標乘以15嗎?這項工作對我來說(謝謝btw),但我不明白這一部分。我也看到其他參考乘以20.爲什麼這樣做? – ptownbro 2016-04-08 15:50:11

+0

@ptownbro我不記得爲什麼x乘數在那裏,但是y乘數對於使鼠標移動與treeviewbox中項目的位置共同至關重要。我在窗體上設置了一個控件,顯示了我移動鼠標的位置,很明顯,我的樹視圖框中的每個項目都是15像素高。根據你的盒子的字體大小,你可能需要一個不同的倍增器(我的字體是Tahoma 8)。 – 2016-04-14 14:32:08

相關問題