C# 值c中的组合框加倍#
我有以下代码:C# 值c中的组合框加倍#,c#,combobox,C#,Combobox,我有以下代码: private void nameTextBox_Leave(object sender, EventArgs e) { var names = ConfigurationManager.AppSettings.AllKeys .Where(k => k.StartsWith("name")) .ToArray(); // A
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元素都会加倍。如果里面有肯、约翰、蒂姆,如果我再按tab键,就会显示两次
我尝试在上面的名称中使用distinct,但这并没有起到任何作用,因为每次都会创建新实例,并保存上一个实例。我不能在添加名称后立即将comboBox设为空,因为它正在代码中的按钮单击中使用
我认为唯一的选择是声明一个全局变量,并确保其值为0
然后只在comboBox中插入值,并在插入值后将其更改为1。但这似乎不是一个好的编码实践
是否有更好的方法来完成此操作?在
AddRange
之前添加comboBox.Items.Clear()
。所以整个街区都应该是这样
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);
}
我不确定我是否完全理解,但是为什么你不能在填充之前清除这些项呢
comboBox.Items.Clear()
comboBox.Items.AddRange(names);
您也可以尝试不使用项,而是使用数据源:
comboBox.DataSource = names;
首先清除组合框的建议应该可以解决您的问题,但是如果您也在页面加载中加载组合框,那么我认为这不是最好的解决方案(只是掩盖了真正的问题)。如果要在页面加载时填充组合框,请在其中添加页面。IsPostBack签入: 例如:
if(!Page.IsPostBack)
{
//Populate the initial values into the combobox
}
如果您没有,那么清晰的解决方案应该很好。您几乎就找到了。在之前而不是之后清除组合框。是否在页面加载时将值加载到组合框中?如果是这样的话,请参见下面我的答案……为什么应该使用DataSource而不是items?有什么特别的原因吗?@NearoMe,
DataSource
当然是另一个选项,通常在绑定到复杂对象以及显示名称和值名称字段时使用。在封面下,它仍然使用显示字段根据复杂对象生成一个项目列表
,但在提供SelectedValue
时使用它的方式不同,因为它从复杂对象中提取值。@novelme,DataSource为您提供了更大的灵活性。您可以绑定任何对象,如List、Dictionary、custom类等,并将此对象的特定成员用作DisplayMember,将另一个成员用作ValueMember。例如: