【问题标题】:Listbox Calculator列表框计算器
【发布时间】:2019-10-07 06:50:11
【问题描述】:

大家好,我需要你的帮助。我刚接触 C#,我正在创建一个程序。我希望这个程序计算列表框中定价项目的总金额,并计算给定金额的变化。我如何在我的项目上加上一个值,以便当我将它添加到我的列表框中时它​​可以计算出来?

https://imgur.com/a/IRFZIan

正如您在图片中看到的那样,列出的项目是布朗尼和炸薯条,列表框中的布朗尼总数是 x5,这意味着 5 件,炸薯条是 x10,即 10 个订单,因此总金额应为 375.00 和变化是 325.00

【问题讨论】:

  • 您可以访问列表框代码吗?你应该为这个应用程序填写缺失的代码吗?
  • @TejasPendse 是的,我有访问权限

标签: c# winforms listbox calculator


【解决方案1】:

我建议使用正则表达式,以便匹配 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);

【讨论】:

【解决方案2】:

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

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

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

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

然后发帖total就很简单了。

【讨论】:

  • 我使用了列表框,因为我对 C# 还没有太多的了解,但是如果有其他更简单的选项,请使用它,感谢您的回答,我会尝试一下
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多