ComboBox在值c#中加倍

时间:2012-09-06 18:37:08

标签: c# combobox

我有以下代码:

private void nameTextBox_Leave(object sender, EventArgs e)
{                  
    var names = ConfigurationManager.AppSettings.AllKeys
                        .Where(k => k.StartsWith("name"))
                        .ToArray();

    // Add names to combobox
    comboBox.Items.AddRange(names);
}

问题是每次我从文本框中按 Tab ,comboBox元素都会继续加倍。如果它中有 Ken,John,Tim ,如果我再次按Tab键,它将显示两次。

我尝试在上面的名称中使用distinct,但是每次创建新的瞬时时都不会执行任何操作,并保存上一个。添加名称后,我无法将comboBox设置为空,因为它在代码中单击后面的按钮时使用。

我认为唯一的替代方法是声明一个全局变量并确保其值为0 然后只在comboBox中插入值,并在插入值后将其更改为1。但这似乎不是一个好的编码实践。

有没有更好的方法来完成这项工作?

3 个答案:

答案 0 :(得分:6)

comboBox.Items.Clear()之前添加AddRange。所以整个块应该是。

private void nameTextBox_Leave(object sender, EventArgs e) 
{                   
    var names = ConfigurationManager.AppSettings.AllKeys 
                        .Where(k => k.StartsWith("name")) 
                        .ToArray(); 

    // Add names to combobox 
    comboBox.Items.Clear();
    comboBox.Items.AddRange(names); 
} 

答案 1 :(得分:1)

我不确定我是否完全理解,但为什么不能在填充之前清除这些项目?

comboBox.Items.Clear()
comboBox.Items.AddRange(names);

你也可以尝试不使用Items,但是DataSource:

comboBox.DataSource = names;

答案 2 :(得分:0)

首先清除组合框的建议应解决您的问题,但如果您在页面加载时加载组合框,那么我认为这不是最佳解决方案(只是掩盖了真正的问题)。如果 在页面加载时填充组合框,则在其中添加Page.IsPostBack检查:

示例:

if(!Page.IsPostBack)
{
    //Populate the initial values into the combobox
}

如果不是那么明确的解决方案应该没问题。