簡體   English   中英

從列表框項目中提取數字

[英]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

注意:您可以創建一些DisplayDescription屬性,該屬性將返回格式化的字符串,並將此屬性指定為listBox的DisplayMember名稱,而不是替代ToString()功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM