C# 如何将Listbox中项目的值返回到Textbox

C# 如何将Listbox中项目的值返回到Textbox,c#,winforms,C#,Winforms,我的情况是,我需要将列表框中所有项目的价格相加,并在文本框中显示总价。我使用的是c#WinForms。这是我到目前为止所拥有的,但它不能通过显示总计来正确工作,它显示的是我按下的最后一个项目的价格,而不是所有项目的总计 public class SelectedPizza { public string Size { get; set; } public string Name { get; set; } public string Pri

我的情况是,我需要将
列表框中所有项目的价格相加,并在文本框中显示总价。我使用的是c#WinForms。这是我到目前为止所拥有的,但它不能通过显示总计来正确工作,它显示的是我按下的最后一个项目的价格,而不是所有项目的总计

public class SelectedPizza
    {
        public string Size { get; set; }
        public string Name { get; set; }
        public string Price { get; set; }

        public string Format() => $"{Size} {Name} {Price}"; // Format inside Listbox
    }
    private void ButtonSizeClick(object sender, EventArgs e)
    {
        var button = (Button)sender;
        _selectedPizza.Size = button.Tag.ToString(); // Adds pizza size to order listbox

        if (_selectedPizza.Name != null)
            _selectedPizza.Price = GetPrice(_selectedPizza.Size);
    }

    private void ButtonNameClick(object sender, EventArgs e)
    {
        var button = (Button)sender;
        _selectedPizza.Name = button.Tag.ToString();

        if (_selectedPizza.Size != null)
            _selectedPizza.Price = GetPrice(_selectedPizza.Size);

        listBox1.Items.Add(_selectedPizza.Format()); // Adds pizza name to order listbox
    }
private string GetPrice(string sSize)
        {
            string sPrice = "0.00";

        if (sSize == "Large")
            sPrice = "11.90";

        TxtbxTotal.Text = sPrice;  // Displays price in order total textbox
        return sPrice;
    }

你似乎写了一个不错的程序,但你这样做是在扼杀它
listBox1.Items.Add(_selectedPizza.Format())

你需要使用这项技术

public interface ifoodtem//所有列表框项都必须具有某些属性
{
公共int Id{get;set;}
字符串名称{get;set;}
字符串价格{get;set;}
公共字符串显示{get;}
}
公共级比萨饼:FoodItem
{
公共int Id{get;set;}
公共字符串大小{get;set;}
公共字符串名称{get;set;}
公共字符串Price{get;set;}
公共字符串显示
{
获取{return$“{Size}{Name}{Price}”;}
}
}
//另一个例子
公共类:FoodItem
{
// . . . .  .
}
//. . . .  . .
//获取列表
var listData=新列表();
添加(…);
// . . . .  . 
//这就是您应该如何设置列表-数据源总是最后一个
lstList.ValueMember=“Id”;
lstList.DisplayMember=“显示”;
lstList.DataSource=listData;
//获取所选项目信息
IFoodItem=(IFoodItem)lstList.SelectedItem;
txtItemPrice.Text=item.Price;
//使用LINQ获取总数
Text=((List)lstList.DataSource).Sum(item=>item.Price);
更新
来自OP:“我必须遵守学校的规范,所以我需要知道的只是如何使用我已经获得的代码”

您的值是<代码>公共字符串格式()=>$“{Size}{Name}{Price}”添加到这里
列表框1.Items.Add(_selectedPizza.Format())

在本例中,您可以这样做(您的总和是列表中字符串项的第三部分)

var总和=0m;
foreach(listBox1.Items中的对象项)
{ 
字符串[]itemParts=
((字符串)项).Split(默认值(char[]),StringSplitOptions.RemoveEmptyEntries;
//价格是最后一个指数
sum+=decimal.Parse(itemParts[itemParts.Length-1]);//获取最后一项
} 
Text=sum;
这是工作单元测试

使用系统;
使用System.Collections.Generic;
公共课程
{
公共静态void Main()
{
var list=新列表();
列表。添加(“aaa xxx 5 10.99”);
列表。添加(“bbb yyy 7 11.99”);
添加(“ccc zzz 8 12.99”);
var总和=0m;
foreach(列表中的对象项)
{ 
字符串[]itemParts=
((字符串)项).Split(默认值(char[]),StringSplitOptions.RemoveEmptyEntries;
//普莱斯指数是2
sum+=decimal.Parse(itemParts[itemParts.Length-1]);
} 
控制台写入线(总和);
}
}

我不会深入讨论您的问题,但我会解决主要问题

最后,您希望对列表框项目进行汇总

为此,请在代码中添加以下内容:

for (int i = 0; i < listboxname.Items.Count; i++)
{ 
   sum += Convert.ToDecimal(listboxname.Items[i].Text);
} 
textBoxtotal.Text = Convert.ToString(sum);
for(int i=0;i
我粗略地阅读了整个代码,找不到任何与列表框总数相关的事件。可能您没有写入total按钮的单击事件


TxtbxTotal.Text=sPrice你认为这行代码做什么?请分享一个,包括如何调用该方法。我不理解这段代码。我只想要一个文本框,可以把所有商品的价格加起来listbox@MasonBoce你打算怎么做?通过解析文本列表项中的字符串?如果你愿意,你可以做。但我的代码显示列表项应该是对象,而不是字符串。然后你可以得到每一个对象,得到它的价格,然后做一个总结。如果没有新的代码,我怎么做是我想要的know@MasonBoce调整新代码。我的例子正好说明了它是如何工作的。你可以用对象作为列表项,而不是字符串。我必须遵守学校的规范,所以我需要知道的是如何使用我已经得到的代码。如果你能帮忙的话,谢谢。我认为这样就可以了:TxtbxTotal.Text=sPrice;返回精灵;这意味着行:sum+=Convert.ToDecimal(listboxname.Items[i].Text);格式不正确,不接受该格式中的“.text”line@MasonBoce:尝试将
.Text
更改为
.ToString()
“输入字符串格式不正确。”对于行总和+=Convert.ToDecimal(listboxname.Items[i].ToString())@MasonBoce:伙计,有个小错误。您是否正在尝试将名称(
listboxname.Items[i]
)转换为双精度?名称将包含单词,并且单词不能转换为双精度!我想你们在同一个列表框中有尺寸、名称和价格。在这种情况下,请确保用空格分隔,然后使用
listboxname.Items[i].ToString().Split(“”)[2]