使用组合框从类中选择和检索数据

时间:2016-12-18 18:57:29

标签: c#

我当前的设置有一个当前只有2个变量的类(字符串类型和int数量)。

我覆盖ToString以将这两件事打印在一起。在我的表单中,我实例化了这个类的不同实例,并且恰好填充了组合框,它打印了我的覆盖。

我的问题是如何确定选择哪个实例?我可以使用selecteditem来检索我的tostring覆盖罚款,但如果我想改变特定实例的金额变量,如果它被选中了怎么办?

SelectedItem.Instance.VariableName

我想它会是这样的,我只是不熟悉那种语法。

3 个答案:

答案 0 :(得分:0)

您可以将对象添加到组合框,然后使用显示成员来确定显示哪个属性。

https://msdn.microsoft.com/en-us/library/system.windows.forms.listcontrol.displaymember(v=vs.110).aspx

答案 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();
    }
}