C# 从comboBox中获取输入并将其拆分,以便获得所选项目的价格

C# 从comboBox中获取输入并将其拆分,以便获得所选项目的价格,c#,combobox,C#,Combobox,我有一个组合框,用户可以从中选择各种饮料 comboBoxBeverage.Items.Add(""); comboBoxBeverage.Items.Add("Soda $1.95"); comboBoxBeverage.Items.Add("Tea $1.50"); comboBoxBeverage.Items.Add("Coffee $1.25"); comboBoxBeverage.Items.Add("Mineral Water $2.95"); comboBoxBeverage.Dr

我有一个组合框,用户可以从中选择各种饮料

comboBoxBeverage.Items.Add("");
comboBoxBeverage.Items.Add("Soda $1.95");
comboBoxBeverage.Items.Add("Tea $1.50");
comboBoxBeverage.Items.Add("Coffee $1.25");
comboBoxBeverage.Items.Add("Mineral Water $2.95");
comboBoxBeverage.DropDownStyle = ComboBoxStyle.DropDownList;
comboBoxBeverage.SelectedIndex = 0;
但是我想选择组合框中选择的选项并将其拆分,以便使用价格

我试过了

double beverage;
beverage = double.Parse(comboBoxBeverage.Text.TrimStart(new[] { '$' }));
labelSubtotal.Text = beverage.ToString();
但这给了我一个错误:

System.FormatException:'输入字符串的格式不正确。'


你可以试一试。它只获取所选项目,将其拆分为
$
所在的两个元素,跳过第一个元素,并将第二个元素的值分配给
itemPrice

using System;
using System.Linq;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public double SubTotal { get; set; }
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            comboBoxBeverage.Items.Add("");
            comboBoxBeverage.Items.Add("Soda $1.95");
            comboBoxBeverage.Items.Add("Tea $1.50");
            comboBoxBeverage.Items.Add("Coffee $1.25");
            comboBoxBeverage.Items.Add("Mineral Water $2.95");
            comboBoxBeverage.DropDownStyle = ComboBoxStyle.DropDownList;
            comboBoxBeverage.SelectedIndex = 0;
        }

        private void Button1_Click(object sender, EventArgs e)
        {                     
            var itemPrice = comboBoxBeverage.Text.Split('$').Skip(1).FirstOrDefault();
            SubTotal += double.Parse(itemPrice);
            labelSubtotal.Text = "$" + SubTotal;
        }
    }
}

以下是解决问题的一种更为面向对象的方法,并消除了解析输入文本的问题:

首先创造一个一流的饮料

public class Beverage
{
    public string Description {get;set;}
    public decimal Price {get;set;}
    public override string ToString()
    {
       return $"{this.Description} {(this.Price != 0 ? this.Price.ToString("C") : "")}";
    }
}
现在用您的数据创建一个
列表

List<Beverage> drinks = new List<Beverage>()
{
    new Beverage {Description = "", Price = 0m},
    new Beverage {Description = "Soda", Price = 1.95m},
    new Beverage {Description = "Tea", Price = 1.50m},
    new Beverage {Description = "Coffee", Price = 1.25m},
    new Beverage {Description = "Mineral Water", Price = 2.95m}
};
comboBoxBeverage.DropDownStyle = ComboBoxStyle.DropDownList;
comboBoxBeverage.DataSource = drinks;
此解决方案之所以有效,是因为除非您设置DisplayMember和ValueMember属性,否则ComboBox会为通过DataSource属性添加到其列表中的每个项目调用ToString()。
还请注意,您应该使用十进制类型,而不是双精度类型

它给您带来了什么错误?在调试过程中,它给了我“System.FormatException:'输入字符串的格式不正确”。”我会使用数据库或列表中的数据源,以便向用户显示
DisplayMember
,并从
ValueMember
获取价格。请阅读并采取行动
它给了我一个错误
对描述这个问题一点帮助都没有。一种基本的方法是
var strPrice=text.Split(“$”).Skip(1).FirstOrDefault()
private void Button1_Click(object sender, EventArgs e)
{                     
    if(comboBoxBeverage.SelectedItem != null)
    {
        Beverage b = comboBoxBeverage.SelectedItem as Beverage;
        SubTotal += b.Price;
        labelSubtotal.Text = SubTotal.ToString("C");
    }
}