列表框计算器
Listbox Calculator
大家好,我需要你们的帮助。我只是 C# 的新手,我正在创建一个程序。我想让这个程序计算列表框中定价项目的总量,并计算给定金额的变化。我如何在我的项目上设置一个值,以便当我将它添加到我的列表框时可以计算它?
正如您在图片中看到的,列出的项目是核仁巧克力饼和炸薯条,列表框中核仁巧克力饼的总量是 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);
大家好,我需要你们的帮助。我只是 C# 的新手,我正在创建一个程序。我想让这个程序计算列表框中定价项目的总量,并计算给定金额的变化。我如何在我的项目上设置一个值,以便当我将它添加到我的列表框时可以计算它?
正如您在图片中看到的,列出的项目是核仁巧克力饼和炸薯条,列表框中核仁巧克力饼的总量是 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);