2013-07-21 49 views
4

我的應用程序包含一個用戶可以從中刪除項目的組合框。當程序啓動時,它會從配置文件讀入的字符串列表中填充ComboBox。所有項目刪除後的組合框大小問題

以下是加上項目代碼:

// version list is an array of strings 
foreach (string version in versionList) 
{ 
    versionComboBox.Items.Add(version); 
} 
if (versionComboBox.Items.Count > 0) 
{ 
    versionComboBox.SelectedIndex = 0; 
} 

這裏是組合框的截圖,它已經填充後:

Combo Box Initial

如果用戶點擊刪除按鈕該程序使用以下代碼從ComboBox中刪除所選項目:

if (versionComboBox.SelectedIndex >= 0) 
{ 
    versionComboBox.Items.Remove(versionComboBox.SelectedItem); 
} 
if (versionComboBox.Items.Count > 0) 
{ 
    versionComboBox.SelectedIndex = 0; 
} 

這裏是組合框的截圖後,一些項目已被刪除:

Combo Box Reduced

我遇到的問題是,當最後一個項目被刪除的組合框調整大小本身的大小是當它最初是人口稠密時。 ComboBox中沒有任何項目,但它的大小就好像存在一樣。

下面是截圖後,所有項目已被刪除:

Combo Box Cleared

正如你所看到的尺寸太大。我認爲,所有的項目都被清除後,它看起來像下面這樣:

Combo Box Initial No Data

任何想法,爲什麼發生這種情況?

回答

1

要清除組合框,你可以補充一點:

if (versionComboBox.Items.Count == 0) 
{ 
    versionComboBox.Text = string.Empty; 
    versionComboBox.Items.Clear(); 
    versionComboBox.SelectedIndex = -1; 
} 

另一種方法是操縱數據源的項目,每次都重新綁定控件(少了很多爲你操心)。

+0

這工作真棒!似乎有點奇怪,我必須這樣做,但哦,至少它有效。 :) –

+0

@JanTacci很高興我能幫助:)乾杯 –

+1

奇怪。我有2個組合框,但您的解決方案只適用於其中的1個。我比較了兩個組合框的屬性,我發現的一個差異是一個名爲* IntegralHeight *的布爾屬性。它的工作原理是將此屬性設置爲false,而不工作的屬性將此屬性設置爲true。所以我把它的屬性改爲false,現在它適用於兩者!注意自己...查找(有時)什麼* IntegralHeight *做的。 –

0

集DropDownHeight屬性來解決大小

versionComboBox.DropDownHeight = 106; // default value 
3

試着在你的代碼的結尾,當你填充組合框的項目使用此:

comboBoxNumTreno.IntegralHeight = true; // auto fit dropdown list 

然後把它清除掉:

comboBoxNumTreno.ResetText(); 
comboBoxNumTreno.Items.Clear(); 
comboBoxNumTreno.SelectedIndex = -1; 
comboBoxNumTreno.DropDownHeight = 106; // default value 
comboBoxNumTreno.IntegralHeight = false; 
+0

這工作,而標註爲解決方案的評論不適合我。完全公開:我有ComboBox_DataSourceChanged事件處理程序中的清理代碼。 謝謝盧克! – Toolsmythe

2

我知道這是一箇舊帖子,但花了很長時間才弄清楚,我想讓任何人在fu知道。清除組合框後,只需執行一個空白添加項目並重置高度。

comboBox1.Items.Clear(); 
comboBox1.Items.Add(""); 
相關問題