2017-10-29 21 views
-1

の価格は、私は、ユーザーが飲み物コンボボックスから入力を取り、私が選択した項目

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: 'Input string was not in a correct format.'

+0

何が原因でエラーが発生しますか? – Jecoms

+0

デバッグ中に "System.FormatException: '入力文字列が正しい形式ではありませんでした。'" – xoxoGG

+0

DBまたはリストからデータソースを使用するので、ユーザーに 'DisplayMember'を表示して価格を得ることができました'ValueMember'から。 [ask]を読んで[tour]を取ってください。 'それは私にエラーを与える'は、問題を記述するのに役立つ最小ビットではない – Plutonix

答えて

0

あなたはこの打撃を与える可能性があります。それはちょうど、選択した項目をとる$が配置されている二つの要素に分割し、最初の要素をスキップしitemPriceに2つ目の要素の値を代入します。

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; 
     } 
    } 
} 
2

あなたの質問に多くのOOPのアプローチとも取り外し入力テキストを解析の問題は以下の通りです:

ファーストクラスを作成飲料今

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>を作成

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; 

今、あなたは、文字列の代わりにあなたのコンボボックスから飲料のインスタンスを取得することができますし、この飲料のインスタンスから直接価格を得る

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"); 
    } 
} 

コンボボックスは、すべての項目に対してtoString()を呼び出すため、このソリューションは動作しますDisplayMemberプロパティとValueMemberプロパティを設定しないかぎり、DataSourceプロパティを使用してそのリストに追加されます。 when dealing with currency valuesにも注意してください。ダブルタイプではなく小数点タイプを使用してください。

関連する問題