C# 更改元素后刷新列表框项
我有一个ParameterItem类,用于将某些项添加到列表框:C# 更改元素后刷新列表框项,c#,listbox,listboxitem,C#,Listbox,Listboxitem,我有一个ParameterItem类,用于将某些项添加到列表框: class ParameterItem { public string Name { get; set; } public string Value { get; set; } public ParameterItem(string name, string value) { Name = name; Value = value; } public
class ParameterItem
{
public string Name { get; set; }
public string Value { get; set; }
public ParameterItem(string name, string value)
{
Name = name;
Value = value;
}
public override string ToString()
{
return Name + " = " + Value;
}
public override bool Equals(object obj)
{
if (obj is ParameterItem)
return (Name == ((ParameterItem)obj).Name);
return false;
}
public override int GetHashCode()
{
return Name.ToLowerInvariant().GetHashCode();
}
}
您可以使用两个文本框(名称和值)将项目添加到列表框中。单击列表框中的某个项目时,文本框中会填充参数项的名称和值。我有以下代码来更改列表框中所选参数项的内容:
private void btnSaveParameter_Click(object sender, EventArgs e)
{
ParameterItem currentParameter = new ParameterItem(textParameterName.Text,
textParameterValue.Text);
// If we already have the parameter set then edit it.
if (lstbxSetParameters.Items.Contains(currentParameter))
{
((ParameterItem)lstbxSetParameters.SelectedItem).Value = currentParameter.Value;
lstbxSetParameters.;
}
// If it's not set yet then add it to the listbox.
else
{
lstbxSetParameters.Items.Add(currentParameter);
textParameterName.Text = String.Empty;
textParameterValue.Text = String.Empty;
}
}
问题是,即使我可以在列表框中更改所选参数项的内容,它看起来仍然没有更改
例如,我在列表框中有一个参数:
TestParameter=10
我将参数项改为
TestParameter=5
但在列表框中,它仍然看起来像
TestParameter=10
即使它被改变了
我怎样才能解决这个问题?我认为listbox项应该再次调用ParameterItem的ToString()
方法并刷新它自己,但是如何呢
或者有更好的方法在列表框中添加键值对吗?您可以通过删除选定项并再次插入来更改它
// If we already have the parameter set then edit it.
if (lstbxSetParameters.Items.Contains(currentParameter))
{
var newItem = new ParameterItem((lstbxSetParameters.SelectedItem as ParameterItem).Name, currentParameter.Value);
var index = lstbxSetParameters.SelectedIndex;
lstbxSetParameters.Items.RemoveAt(index);
lstbxSetParameters.Items.Insert(index, newItem);
lstbxSetParameters.SelectedIndex = index;
}
我的解决方案:
string[] nList = new string[lb.Items.Count];
nList = lb.Items.OfType<string>().ToArray();
nList[lb.SelectedIndex] = newValue;
lb.Items.Clear();
lb.Items.AddRange(nList);
string[]nList=新字符串[lb.Items.Count];
nList=lb.Items.OfType().ToArray();
nList[lb.SelectedIndex]=新值;
lb.Items.Clear();
lb.Items.AddRange(NLList);
通过这种方式,我没有更改所选项目(有很多问题),而是使用数组中更改的项目重新加载了列表框。您的
SelectedItem
并不总是与CurrentParameter匹配的项目。当列表框中的所选项目更改时,文本框中的值也会更改,我没有添加该部分。我想这就是为什么你说它不会永远是唯一的。