2012-10-16 62 views
1

我試圖在計算任何靜態寬度列寬度後,根據剩餘大小僅重新調整ListView的某些列大小。例如,我不希望列(如數量,價格等)調整大小,但我希望列的數據通常具有更廣泛的數據,如名稱,描述等。以下是我正在嘗試使用的方法,但它不起作用。如何調整某些列表視圖列的大小與列表視圖的剩餘大小成比例

順便說一句,我在ClientSizeChanged事件觸發ListView時調用此方法。不確定這是否相關。

public static void ResizeListViewColumns(ListView lv, List<int> fixedColumnIndexes, List<int> nonFixedColumnIndexes) 
    { 
     int lvFixedWidth = 0; 
     int lvNonFixedWidth = 0; 
     if (fixedColumnIndexes.Count + nonFixedColumnIndexes.Count != lv.Columns.Count) 
     { 
      throw new Exception("Number of columns to resize does not equal number of columns in ListView"); 
     } 
     else 
     { 
      // Calculate the fixed column width 
      // Calculate the non-fixed column width 
      // Calculate the new width of non-fixed columns by dividing the non-fixed column width by number of non-fixed columns 
      foreach (var fixedColumn in fixedColumnIndexes) 
      { 
       lvFixedWidth += lv.Columns[fixedColumn].Width; 
      } 

      foreach (var nonFixedColumn in nonFixedColumnIndexes) 
      { 
       lvNonFixedWidth += lv.Columns[nonFixedColumn].Width; 
      } 

      int numNonFixedColumns = nonFixedColumnIndexes.Count; 
      foreach (var newNonFixedColumn in nonFixedColumnIndexes) 
      { 
       lv.Columns[newNonFixedColumn].Width = lvNonFixedWidth/numNonFixedColumns; 
      } 
     } 
    } 

回答

1

像這樣的東西應該爲你...而是保持固定和不固定的指數列表中,在我的例子中,我設定每個固定列「固定」的字符串「變量」屬性。

int fixedWidth = 0; 
     int countDynamic = 0; 

     for (int i = 0; i < listView1.Columns.Count; i++) 
     { 
      ColumnHeader header = listView1.Columns[i]; 

      if (header.Tag != null && header.Tag.ToString() == "fixed") 
       fixedWidth += header.Width; 
      else 
       countDynamic++; 
     } 

     for (int i = 0; i < listView1.Columns.Count; i++) 
     { 
      ColumnHeader header = listView1.Columns[i]; 

      if (header.Tag == null) 
       header.Width = ((listView1.Width - fixedWidth)/countDynamic); 
     } 
+0

謝謝你。這對我來說很好。 – Grasshopper

+0

一個簡單的問題,如果你有一分鐘​​。有沒有簡單的方法來確定是否存在滾動條,以便可以通過滾動條的寬度來減小最後一列的寬度? – Grasshopper

+0

我第一次猜測會嘗試ListView.ClientSize,因爲它不應該包括那些部分,包括滾動條 – Alan

相關問題