我有以下代码:
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。但这似乎不是一个好的编码实践。
有没有更好的方法来完成这项工作?
答案 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
}
如果不是那么明确的解决方案应该没问题。