在c#中使用Winforms将对象字符串转换为对象(类)

本文关键字:对象 转换 字符串 Winforms | 更新日期: 2023-09-27 18:03:48

在这里我要告诉你我在做什么,然后是我的问题。我想告诉你们我在做什么…这样你们就能更好地理解我的问题了。

提前感谢,

我正在做一个项目。这个应用程序是一个杂货计算器。我有一门课叫Artikel。这个类是我的其他派生类的基类,比如(蔬菜,饮料,温暖的食物…)等等)。

我从我的数据库中得到了一个充满数据的组合框。我要做的是将每个产品的价格添加到"总成本购物车"中。我的基类看起来像这样:

class Artikel
{
    // properties
    private string naam;
    private double prijs;
    private string winkel;
    // properties
    public string Naam
    {
        get { return naam; }
        set { naam = value; }
    }
    public double Prijs
    {
        get { return prijs; }
        set { prijs = value; }
    }
    public string Winkel
    {
        get { return winkel; }
        set { winkel = value; }
    }
    // constructor
    public Artikel(string naam, double prijs, string winkel)
    {
        this.Naam = naam;
        this.Prijs = prijs;
        this.Winkel = winkel;
    }
    // methods
    public override string ToString()
    {
        string info = "€ " + Prijs;
        return info;
    }

在我的主表单中,我使用以下代码将其添加到我的组合框中:

    foreach(var g in database.GetGroenteInfo())
    {
        cbGroentenLidl.Items.Add(g.Naam);
    }

当组合框中填满"蔬菜"数据时,我可以选择一个项目。从这里我可以添加选中的项目到我的"lbLidlKosten",代码如下:

lbLidlKosten.Items.Add(cbGroentenLidl.SelectedItem);

现在我的数据是正确的,我想要它…问题来了。现在我想添加我添加到列表框的每个产品的价格…我的厂牌。所以基本上,我在"lbLidlKosten"中添加的产品越多,label.text中的成本就会增加越多。我希望你明白我的意思。

我尝试了以下方法使它工作:

    artikelList = database.GetGroenteInfo();
    //foreach (Artikel a in artikelList)
    //{
    //    label2.Text = Convert.ToString(a.Prijs);
    //    label2.Text = cbGroentenLidl.SelectedItem;
    //}
    //foreach (Artikel a in lbLidlKosten.Items)
    //{
    //    label2.Text = a.Prijs.ToString();
    //}
    //Artikel artikel = (Artikel)cbGroentenLidl.SelectedItem;
    //label2.Text = artikel.Prijs.ToString();
    foreach (Artikel a in lbLidlKosten.Items)
    {
        label2.Text = Convert.ToString(a.Prijs);
    }

所有这些解决方案都不起作用。因为我得到了错误:"无法将对象字符串转换为对象名称".

有人知道吗?这可能很简单……但是我找不到它,我被卡住了3天。

With kind regards

在c#中使用Winforms将对象字符串转换为对象(类)

在这里:

foreach(var g in database.GetGroenteInfo())
{
    cbGroentenLidl.Items.Add(g.Naam);
}

您正在向组合框中添加名称,而不是项目本身。也许您可以尝试将项集合绑定到组合框数据源,如下所示:

cbGroentenLidl.DataSource = database.GetGroenteInfo().ToList();
cbGroentenLidl.DisplayMember = "Naam";

然后,当你添加到列表框,你将有对象,而不仅仅是名称。

也没有增加值。你可以试试这个:

double prijs = 0;
foreach (Artikel a in lbLidlKosten.Items)
{
    prijs += a.Prijs;
}
label2.Text = Convert.ToString(prijis);

如果最后一行不起作用,试试这个:

label2.Text = "" + prijs;