2012-04-19 111 views
0

我有一個c#窗體窗體應用程序,其中我在tabControl的tabPage內有一個treeView,它是主窗體的一部分。單擊鼠標2次鼠標單擊後發生更改

對於樹視圖,我點擊了我想要選擇的treeView的項目,然後根據我選擇的項目進行一些更改。

我正在使用AfterSelect事件進行項目選擇,並使用mouseUp事件來撤消選擇。

項目選擇和取消選擇立即發生,只需點擊一下(沒問題)。其他更改應該基於兩次點擊後發生的選定項目發生!只需在項目節點上或在節點區域外單擊即可不觸發此更改。我必須再次點擊以查看更改。這是有線的。我沒有使用鼠標雙擊事件或類似的東西,我只使用我上面描述的事件。

這怎麼會發生?以及如何解決它?謝謝。

編輯:我使用我自己的多選版本的treeView,我發現(使用調試),當我第一次點擊後得到AfterSelect事件中的樹的選定節點爲零,那麼它是第二次點擊所選節點的數量。在添加了選定節點時,如何在發生這種情況時發生這種情況,並在每次點擊TreeView的重寫OnAfterSelect事件時將其添加到當前selectedNodes列表中?

這裏的樹視圖代碼的一部分:(?)

public List<TreeNode> SelectedNodes 
     { 
      get 
      { 
       return selectedNodes; 
      } 

      set 
      { 
       removeSelectionFromNodes(); 
       selectedNodes = value; 
       selectNodes(); 
      } 
     } 

    protected override void OnAfterSelect(TreeViewEventArgs e) 
     { 
      base.OnAfterSelect(e); 
      base.SelectedNode = null; 
      List<MSTreeNode> nodes = new List<MSTreeNode>(); 
        . 
        . 
        . 
       removeSelectionFromNodes(); 
       selectedNodes.Clear(); 
       selectedNodes.AddRange(nodes); 
       selectNodes(); 
     } 
+1

這是鼠標捕獲,Control.Capture屬性的副作用。描述中發生的事情完全不清楚。發佈一個片段。 – 2012-04-19 22:27:29

+0

已更新我的帖子 – mj1261829 2012-04-19 23:00:13

回答

0

我試圖使用MouseDown事件而不是AfterSelect事件。我在我自己的treeView的多選版本中覆蓋它,並在我正在開發的c#應用程序中使用,但仍然無效。我不確定鼠標事件是如何工作的。如果不謹慎使用,您可能會看到有線行爲。

那麼,我最終覆蓋了我的treeView子類中的MouseUp和MouseUp事件,然後我創建了一個事件,它監聽selectedNodes列表中的更改。如果在任何鼠標事件中對selectedNodes的更改感到滿意,則會觸發此事件。然後,當我的應用程序中的Treeview實例的ChangedSelectedNodes事件處理程序在節點選擇發生變化時執行其他更改。這次它按預期工作。

我發佈了這個文件,希望對遇到像我這樣的問題的任何人都有好處。

P.S.有時候事情並不會像你期望的那樣發揮作用,而你只是在爭取和經歷其他各種可能性之後才找到解決方案。

0

也許樹視圖失去焦點在點擊之間。您可以嘗試將Treeview HideSelection屬性設置爲False,以在控件失去焦點時保持當前選定的項目高亮顯示。

+0

將Treeview HideSelection屬性設置爲False不起作用 – mj1261829 2012-04-19 22:31:13