列表框计算器

Listbox Calculator

大家好,我需要你们的帮助。我只是 C# 的新手,我正在创建一个程序。我想让这个程序计算列表框中定价项目的总量,并计算给定金额的变化。我如何在我的项目上设置一个值,以便当我将它添加到我的列表框时可以计算它?

https://imgur.com/a/IRFZIan

正如您在图片中看到的,列出的项目是核仁巧克力饼和炸薯条,列表框中核仁巧克力饼的总量是 x5,即 5 件,炸薯条是 x10,即 10 份订单,因此总金额应为 375.00变化是 325.00

A ListBox 可能不适合您要执行的操作,因为 ListBoxItem 通常只存储一个值。如果您坚持使用它,我建议您将价格存储在 ValueMember 中,如果可以的话,将文本存储在 DisplayMember 中。你可以看看如何做到这一点 here.

但是,如果您想继续使用该方法,请确保您可以可靠地使用字符串中的最后 5 个字符作为 "Price"。

您可以遍历 Listbox 中的每个项目并将每个 ListBoxItem 的值添加到变量中,如下所示:

double total;
foreach(ListBoxItem i in ListboxName)
{
    total += Convert.ToDouble(i.Substring(i.Length-5));
}

然后发帖就很简单了 total.

我建议使用 正则表达式 以便 匹配 number 项及其 price; 为了查询 ListBox.Items 我们可以使用 Linq:

  using System.Linq;
  using System.Text.RegularExpressions;

  ...

  string pattern = 
    @"(?:\s+x(?<number>[0-9]+(\.[0-9]+)?)\s*=\s*)?(?<price>[0-9]+(\.[0-9]+)?)\s*$";

  var total = myListBox
    .Items
    .OfType<Object>()
    .Where(item => item != null)
    .Select(item => Regex.Match(item.ToString(), pattern))
    .Where(match => match.Success)
    .Select(match => new {
      number = string.IsNullOrEmpty(match.Groups["number"].Value)
        ? 1m  // if number is not specified we have 1 item
        : decimal.Parse(match.Groups["number"].Value),
      price = decimal.Parse(match.Groups["price"].Value)
    })
    .Sum(item => item.price * item.number);