none
TreeView的怪問題 for Vista RRS feed

  • 問題

  • 以下情形僅在Vista 系統會有問題,XP是正常的 

    TreeView的CheckBox上快按二下,它僅會跑一次事件
    而且也不會進去Double,必須按下第三下才會進去

    因為我要在NodeMouseClick處理事情,卻發現,如果在CheckBox上按快一點,值會有問題

    我現在開一個新的空表單,放TreeView測試
    我在CheckBox上快按二下(在XP系統樹狀是展開或閉合,在Vista僅CheckBox改變),NodeMouseClick只會進去一次 , BeforeCheck也只會進去一次
    第二下是抓不到的,可是CheckBox第二下就改變了它的勾選狀態,變會有不正常的狀態

    我放了二個Label來記錄Treeview的Check狀態,一個用來記錄事件的次數
    BeforeCheck事件~應該會顯示點下去之前的狀態
    NodeMouseClick 事件~應該會顯示點下後的狀態

    快按二下,結果就相反了~事件抓不到第二下,CheckBox卻會反應第二下的動作??

     Dim d As Integer
     Private Sub TreeView1_BeforeCheck(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewCancelEventArgs) Handles TreeView1.BeforeCheck
            Me.Label2.Text = e.Node.Checked.ToString
     End Sub
     private Sub TreeView1_NodeMouseClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeNodeMouseClickEventArgs) Handles TreeView1.NodeMouseClick
            d += 1
            Me.Label1.Text = d
            Me.Label3.Text = e.Node.Checked.ToString
     End Sub
    2009年1月31日 下午 05:24

解答

  • 這個是目前已知的問題,是Windows Vista中comctl32.dll V6的問題。
    (在Vista + Comctl32 v6情況下才會發生,若是XP + Comctl32 V6則不會產生這個問題)

    Windows OS Bugs 1,978,667 and DevDiv
    Bugs 91321


    目前的Work around是可以透過在Vista使用comctl32.dll V5來解決這個問題。


    LOLOTA - 微軟技術支援中心(CSS) - http://blog.lolota.net
    • 已提議為解答 bauann 2009年2月2日 上午 03:09
    • 已標示為解答 Lolota Lee 2009年2月9日 上午 10:20
    2009年2月2日 上午 02:11
    版主