2012-09-26 48 views
1

我創建了一個表格佈局面板來顯示字典中的值,但是表格佈局面板不斷切割我放入14個字符的單元格中的Label控件。我試圖擺弄我的表格佈局面板的ColumnStyles,但沒有任何選項會使Label控件實際適合單元格。我已經嘗試了所有可用的列樣式SizeTypes:C# - TableLayoutPanel切割標籤字符串

自動尺寸(帶有文本值的標籤每次裁剪爲14個字符(「1234567890ABCD」),儘管不存在任何控件的列(間隔符)收縮爲空)

百分比(沒有任何影響 - 即使我將列類型(值,鍵,空間)加權爲不同大小,也沒有列變寬。

絕對(使列×像素寬,但唱片公司在14個字符STILL切斷 - 即使電池是1000個像素寬)

我也試着與標籤的大小屬性搞亂,但我不能編輯,因爲我「無法修改」System.Windows.Forms.Control.Size「的返回值,因爲它不是一個變量」(無論這意味着什麼)。

因此,我已經耗盡了所有這些選項,如何在表格單元格中顯示完整標籤而不會在14個字符處截斷?

下面是生成表格佈局面板的代碼。它使用我構建的自定義類(GridDisplay),它保存包含控件,行號,列號和其他一些字段的對象列表(GridDisplayCell)。該類讓我添加/刪除/移動/插入控件到列表中,然後使用Generate()函數一次性構建表格佈局(而不是事先確定它的大小,或者在我添加項目時重新調整它的大小)。

 private void FillInCustomerData() 
    { 
     GridDisplay grid = new GridDisplay(tl_TopLeft); 
     int rowMax = 8; 
     int columnLabelIndex = 0; 

     int curRow = 0; 
     int curCol = 0; 

     foreach (var item in DD.AllCustomerData["BasicInfo"]) //Dictionary<string, object> 
     { 
      if (curRow == rowMax) 
      { 
       curRow = 0; 
       curCol = columnLabelIndex + 2; //1 for key column, 1 for value column 
      } 

      var keyLabel = new Label(); 
      keyLabel.Text = item.Key; 

      var valueLabel = new Label(); 
      valueLabel.Text = (item.Value == null || item.Value.ToString() == "") ? "NA" : "1234567890ABDCDEF"; //item.Value.ToString() 

      var key = grid.AddItem(new GridDisplayCell(item.Key, keyLabel), item.Key, curRow, curCol); 
      // Function Definition: GridDisplay.AddItem(GridDisplayCell(string cellName, Control control), string cellName, int rowNumber, int colNumber)     
      var value = grid.AddItem(new GridDisplayCell(item.Key + "Value", valueLabel), item.Key + "Value", curRow, curCol+1); 

      curRow++; 
     } 

     grid.WrapMode = false; 
     grid.AutoSize = true; 

     grid.Generate(); 

     //experimenting with column sizes. NOT WORKING 
     foreach (ColumnStyle cs in grid.Table.ColumnStyles) 
     { 
      cs.SizeType = SizeType.AutoSize; 
     }    
    } 

這是我的生成功能塊,實際上增加了控制到TableLayoutPanel中:(_cells是GridDisplayCells的名單,並自動調整大小是GridDisplay在這種情況下(屬性並非TableLayoutPanel中的AutoSize屬性))

foreach (var cellItem in _cells) 
      { 
       if (AutoSize == false && ValidateSize(cellItem.Value.Column, cellItem.Value.Row, false) == false) 
       { 
        continue; //the cell was outside the range of the control, so we don't add it. 
       } 

       _table.Controls.Add(cellItem.Value.CellControl, cellItem.Value.Column, cellItem.Value.Row); 
      } 

任何幫助表示讚賞。

回答

10

修復了這個問題。我需要將Label的AutoSize屬性設置爲true。