[英]Extract a number from a Listbox item
我是編程新手,無法找到一種從列表框中取回電話號碼的方法。
我正在嘗試從列表框中的選定項目中僅提取一個數字。
列表框中的信息類型為“旅行:13年12月3日的15.66歐元。
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();
}
謝謝
您可以在SelecteItem
上使用正則Regex
來提取數字
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;
}
獲得所需數量/價格的簡單方法是使用拆分:
var inputDataParts = inputdata.Split(' ');
現在第二部分應該是價格
string price = inputDataParts[1];
現在擺脫歐元符號並對其進行修剪:
price = price.Replace('€', '').Trim();
現在價格應保持在“ 15.66”-如果需要,可以將其轉換。
較難的方法是使用RegEx。
您可以使用這樣的正則表達式(在此處查找如何使用正則表達式http://msdn.microsoft.com/fr-fr/library/0z2heewz(v=vs.110).aspx ):
string pattern = @"[0-9]+(\.[0-9]+)? ";
然后,您只需要將匹配的字符串轉換為double即可:
double value = Convert.ToDouble(matchedString);
嘗試這個:
string str = listBox1.SelectedItem.ToString();
int startIndex = str.IndexOf('€');
str = str.Substring(startIndex+1).Split(' ')[0].Trim();
decimal value = Convert.ToDecimal(str);
我建議您創建費用類別:
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
注意:您可以創建一些Display
或Description
屬性,該屬性將返回格式化的字符串,並將此屬性指定為listBox的DisplayMember
名稱,而不是替代ToString()
功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.