【问题标题】:Combo Box Size Issue After All Items Are Removed删除所有项目后的组合框大小问题
【发布时间】:2013-07-20 02:24:23
【问题描述】:

我的应用程序包含一个 ComboBox,用户可以从中删除项目。当程序启动时,它会从配置文件中读取的字符串列表中填充 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;
}

这是组合框填充后的屏幕截图:

如果用户单击 删除 按钮,程序会使用以下代码从 ComboBox 中删除所选项目:

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

以下是删除一些项目后组合框的屏幕截图:

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

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

如您所见,尺寸太大。我认为在清除所有项目后,它会如下所示:

关于为什么会发生这种情况的任何想法?

【问题讨论】:

    标签: c# combobox resize selecteditem


    【解决方案1】:

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

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

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

    【讨论】:

    • 效果太棒了!我必须这样做似乎有点奇怪,但至少它有效。 :)
    • @JanTacci 很高兴我能帮上忙 :) 干杯
    • 奇怪。我有 2 个组合框,但您的解决方案仅适用于其中 1 个。我比较了两个组合框的属性,发现的一个区别是一个名为 IntegralHeight 的 bool 属性。它工作的那个将此属性设置为false,而它不工作的那个则将此属性设置为true。因此,我将损坏的属性更改为 false 现在两者都适用!自我注意...查找(有时)IntegralHeight 的作用。
    • @JanTacci 我只是在有或没有IntegralHeight 的情况下对其进行了测试,没有区别。一定是别的东西。嗯
    • 也许是的,但至少它现在对我有用。我可能会稍后对其进行调查以供将来参考,但现在我必须继续前进。 :)
    【解决方案2】:

    设置 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; 
      

      【讨论】:

      • 这行得通,而标记为解决方案的评论对我不起作用。完全披露:我在 ComboBox_DataSourceChanged 事件处理程序中有清理代码。谢谢卢克!!
      【解决方案4】:

      我知道这是一篇旧帖子,但我花了很长时间才弄清楚这一点,我想让以后的任何人都知道。清除组合框后,只需添加一个空白项,它就会重置高度。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-01
        • 1970-01-01
        • 2020-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-08
        相关资源
        最近更新 更多