2010-04-01 26 views
0

我有一個看起來很像Windows資源管理器的窗體。在左側,我有一個樹形視圖控件,右側是一個常規面板。我希望能夠雙擊分隔視圖來根據樹視圖中最長標籤的寬度來調整大小。有誰知道這樣做的好方法嗎?如何雙擊分隔視圖來調整寬度

我的猜測是我會檢查每個節點並嘗試確定每個字符串的長度。然後獲取該數字幷包含任何其他填充或邊距。問候。

回答

1

這工作:

private static int GetNodeBounds(TreeNodeCollection nodes) { 
     int w = 0; 
     foreach (TreeNode node in nodes) { 
      w = Math.Max(w, node.Bounds.Right); 
      if (node.Nodes.Count > 0) 
       w = Math.Max(w, GetNodeBounds(node.Nodes)); 
     } 
     return w; 
    } 

使用範例:

treeView1.ClientSize = new Size(GetNodeBounds(treeView1.Nodes), treeView1.ClientSize.Height); 

要注意的是通過GetNodeBounds返回的值()可以當用戶展開節點改變。它只能看到可見節點的寬度。

1

您可以通過節點列表迭代(使用你決定一切的標準 - 即所有的節點,只是可見的),你應該能夠做這樣的事情來計算任何特定節點寬度:

int theWidth = theTextWidth + theIndentSize * theIndentLevel + theImageWidth; 

您可以遞歸地遍歷樹(如果這是您的實現,則跳過不可見節點),並從調用中返回該寬度,將其與先前計算的maxWidth進行比較,並且maxWidth應該非常接近樹視圖(加上填充,邊距等)。然後將分離器的距離設置爲該值。