2014-02-24 96 views
1

我是编程新手,无法找到从列表框中获取数字的方法。从列表框项中提取数字

我想从列表框中选定的项目中提取一个数字。

类型的列表框中的信息是“旅游:€15.66在13年12月3日

private void btnRemove_Click(object sender, RoutedEventArgs e) 
{ 
    decimal inputdata = (decimal)lbxDisplay.SelectedItems; 

    //Remove selected items from Listbox 
    lbxDisplay.Items.RemoveAt(lbxDisplay.SelectedIndex); 

    //Update Expenses Total text block 
    tblkTotal.Text = string.Format("Total Expenses\t{0}", expense.DeductedTotal(); 
} 

感谢

+2

如果列表框中的信息是“Travel:€15.66 on 12/3/13”,那么你只需要“15.66”吗? –

+0

是的,这是正确的 – JohnnyC

+0

@JohnnyC为什么你想要它只是删除项目,你甚至没有使用该值 –

回答

1

您可以使用RegexSelecteItem提取数

private void button1_Click_1(object sender, EventArgs e) 
    { 

     var sel = listBox1.SelectedItem; 
     Regex reg = new Regex(@"[0-9\.]+"); 
      var res = reg.Match(sel.ToString()); 
     //if you want to compute the total 
     double total = 0; 
     var allItems = listBox1.SelectedItems; 
     foreach (var item in allItems) 
     { 
      double dres = double.Parse(reg.Match(sel.ToString()).Value); 
      total = dres + total; 

     } 
     tblkTotal.Text = string.Format("Total Expenses\t{0}", total); 

    } 

如果你想总的SelectedItems,而不是只有一个项目,你应该做这样的事情在你的窗体的构造只需一招

public Form1() 
     { 
      InitializeComponent(); 
      listBox1.SelectionMode = SelectionMode.MultiExtended; 


     } 
0

最简单的方式,以获得所需数量/价格会使用分裂:

var inputDataParts = inputdata.Split(' '); 

现在第二部分应该是价格

string price = inputDataParts[1]; 

现在摆脱了欧洲注册和修剪:

price = price.Replace('€', '').Trim(); 

现在的价格应该持有“15.66” - 如果需要,将其转换。

更难的方法是使用RegEx。

0

试试这个:

string str = listBox1.SelectedItem.ToString(); 
int startIndex = str.IndexOf('€'); 
str = str.Substring(startIndex+1).Split(' ')[0].Trim(); 
decimal value = Convert.ToDecimal(str); 
0

我建议你创建消费类:

public class Expense 
{ 
    public Expense(string name, decimal amount, DateTime date) 
    { 
     Name = name; 
     Amount = amount; 
     Date = date; 
    } 

    public string Name { get; private set; } 
    public decimal Amount { get; private set; } 
    public DateTime Date { get; private set; } 

    public override string ToString() 
    { 
     return String.Format("{0}: €{1} {2}", 
          Name, Amount, Date.ToShortDateString()); 
    } 
} 

然后将列表框绑定到费用对象列表 - 它们全部将以格式Travel: €15.66 on 12/3/13

var expenses = new List<Expense> { 
    new Expense("Travel", 16.5M, new DateTime(2013, 12, 3)), 
    new Expense("Sports", 13.0M, new DateTime(2013, 12, 4)), 
}; 

listBox1.DataSource = expenses; 

获得选择费用的金额将是容易的,因为选择的项目将是Expense对象:

var expense = (Expense)listBox1.SelectedItem; 
// expense.Amount 

注:除了覆盖ToString()功能,你可以创建一些DisplayDescription属性将返回格式化字符串,并将此属性指定为listBox的DisplayMember名称。