C# 删除所有项目后组合框大小问题

C# 删除所有项目后组合框大小问题,c#,combobox,resize,selecteditem,C#,Combobox,Resize,Selecteditem,我的应用程序包含一个组合框,用户可以从中删除项目。当程序启动时,它从配置文件中读取的字符串列表填充组合框 以下是添加项目的代码: // version list is an array of strings foreach (string version in versionList) { versionComboBox.Items.Add(version); } if (versionComboBox.Items.Count > 0) { versionComboBox.Se

我的应用程序包含一个组合框,用户可以从中删除项目。当程序启动时,它从配置文件中读取的字符串列表填充组合框

以下是添加项目的代码:

// version list is an array of strings
foreach (string version in versionList)
{
  versionComboBox.Items.Add(version);
}
if (versionComboBox.Items.Count > 0)
{
    versionComboBox.SelectedIndex = 0;
}
下面是组合框填充后的屏幕截图:

如果用户单击“删除”按钮,程序将使用以下代码从组合框中删除所选项目:

if (versionComboBox.SelectedIndex >= 0)
{
    versionComboBox.Items.Remove(versionComboBox.SelectedItem);
}
if (versionComboBox.Items.Count > 0)
{
    versionComboBox.SelectedIndex = 0;
}
以下是删除一些项目后组合框的屏幕截图:

我遇到的问题是,当最后一项被删除时,组合框会将其自身大小调整为最初填充时的大小。组合框中没有任何项目,但它会自行调整大小,就像有项目一样

以下是删除所有项目后的屏幕截图:

正如你所看到的,这个尺寸太大了。我认为,在所有项目清理完毕后,情况如下所示:


关于为什么会发生这种情况,您有什么想法吗?

要清除您的组合框,您可以添加以下内容:

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

另一种方法是操作数据源中的项,并每次重新绑定控件(您不必担心太多)。

将DropDownHeight属性设置为固定大小

 versionComboBox.DropDownHeight = 106; // default value

填充组合框项目时,请尝试在代码末尾使用此选项:

comboBoxNumTreno.IntegralHeight = true; // auto fit dropdown list
然后要澄清:

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

我知道这是一篇老文章,但我花了很长时间才弄明白这一点,我想让未来的任何人都知道。清除组合框后,只需执行一个空白添加项,即可重置高度

comboBox1.Items.Clear();
comboBox1.Items.Add("");

太棒了!似乎有点奇怪,我必须这样做,但哦,好吧,至少它起作用了。:)@詹塔奇很高兴我能帮忙:)干杯。我有两个组合框,但您的解决方案只对其中一个有效。我比较了两个组合框的属性,发现一个不同点是一个叫做IntegralHeight的bool属性。它工作的那个将此属性设置为false,而它不工作的那个将此属性设置为true。因此,我将属性更改为false,因为已损坏的属性现在对这两个属性都有效!自我提醒。。。找个时间看看IntegralHeight的功能。@JanTacci刚刚测试了IntegralHeight有无
IntegralHeight
,没有区别。一定是别的东西。嗯,也许是的,但至少它现在对我起作用了。我以后可能会调查它以备将来参考,但现在我必须继续。:)这是有效的,而标记为解决方案的评论对我来说并不适用。完全公开:我在ComboBox_DataSourceChanged事件处理程序中有清理代码。谢谢你,卢克!!