2015-01-01 37 views
2

我在C#中使用Visual Studio Express 2013. 我有CheckListBox,根據底層數據,我可以有不同數量的項目。我試圖根據項目數量調整CheckListBox的高度。 目前一旦項目列表填充我調用下面的方法來設置CheckListBox的高度:設置檢查列表框不工作的高度

 private void SetPanelSize() 
     { 
      int top = tbInstructions.Height + 2; 
      int optionsHeight = 0; 

      for (int i = 0; i < cbOptions.Items.Count; i++) 
      { 
       optionsHeight += cbOptions.GetItemHeight(i); 
      } 

      cbOptions.Location = new Point(4, top); 
      cbOptions.Height = optionsHeight; 
     } 

當我運行這一點,CheckListBox高度設置相當於一個項目比項目的數量少 - 即,如果有三個項目只有兩個可見,需要向下滾動才能看到第三個項目。 調試後,每個選項高度返回爲16.在三個項目的情況下,這將產生48的optionsHeight。但是,當分配的cbOptions.Height設置爲36.

我以前面的方式看到過我計算了高度 - 當我將其分配給高度時,我計算的值會發生變化。 發生了什麼事?我錯過了什麼嗎?在我看過的文獻(主要是MSDN)中,我沒有找到調整高度分配的參考。

任何幫助非常感謝。

回答

0

CheckListBox本身需要一定的高度。所以你需要添加optionsHeight到CheckListBox的高度。嘗試下面的代碼,它會工作:

cbOptions.Height += optionsHeight; 
1

確保您有IntegralHeight屬性設置爲false,你必須彌補邊框大小,太:

cbOptions.IntegralHeight = false; 
int optionsHeight = 0; 
if (cbOptions.BorderStyle == BorderStyle.Fixed3D) { 
    optionsHeight = SystemInformation.Border3DSize.Height * 2; 
} else if (cbOptions.BorderStyle == BorderStyle.FixedSingle) { 
    optionsHeight = SystemInformation.BorderSize.Height * 2; 
}