我当前的设置有一个当前只有2个变量的类(字符串类型和int数量)。
我覆盖ToString
以将这两件事打印在一起。在我的表单中,我实例化了这个类的不同实例,并且恰好填充了组合框,它打印了我的覆盖。
我的问题是如何确定选择哪个实例?我可以使用selecteditem来检索我的tostring
覆盖罚款,但如果我想改变特定实例的金额变量,如果它被选中了怎么办?
SelectedItem.Instance.VariableName
我想它会是这样的,我只是不熟悉那种语法。
答案 0 :(得分:0)
您可以将对象添加到组合框,然后使用显示成员来确定显示哪个属性。
答案 1 :(得分:0)
嗯,这取决于您将数据填充到ComboBox
的方式。例如,如果使用数据绑定,则可以执行以下操作:
Dictionary<string, YourClass> dict = new Dictionary<string, YourClass>();
for (int x = 0; x <= 5; x++)
{
YourClass instance = new YourClass("Test", x);
dict.Add(instance.ToString(), instance);
}
ComboBox1.DataSource = new BindingSource(dict, null);
ComboBox1.DisplayMember = "key";
ComboBox1.ValueMember = "value";
因此,您可以根据ComboBox
的所选项轻松与每个实例的互动进行互动:
Console.WriteLine(((YourClass)ComboBox1.SelectedValue).amount.ToString());
希望有所帮助:)
答案 2 :(得分:0)
创建一个列表&lt;&gt;您的实例并将其设置为ComboBox的DataSource()。然后,您可以检索所选项目,以某种方式更新它,然后重置DataSource,使ComboBox显示新值:
private List<Thing> things = new List<Thing>();
private void Form1_Load(object sender, EventArgs e)
{
Thing thing1 = new Thing();
thing1.Item = "Bob";
thing1.Value = 411;
Thing thing2 = new Thing();
thing2.Item = "Joe";
thing2.Value = -1;
things.Add(thing1);
things.Add(thing2);
comboBox1.DataSource = things;
}
private void button1_Click(object sender, EventArgs e)
{
if (comboBox1.SelectedIndex != -1)
{
Thing thing = (Thing)comboBox1.SelectedItem;
// now do something with "thing":
thing.Value = thing.Value + 1;
// reset the ComboBox to update the entries:
comboBox1.DataSource = null;
comboBox1.DataSource = things;
comboBox1.SelectedItem = thing;
}
}
用Class Thing:
public class Thing
{
public string Item = "";
public int Value = 0;
public override string ToString()
{
return Item + ": " + Value.ToString();
}
}