我是编程和C#的初学者。我想制作一种有趣的清单应用程序。 (我一定是个无聊的人)我正在使用字典保存自己的价值观。我在表单上的布局使用一个文本框输入“条形码”(只是我组成的110011”),一个列表框以显示带有价格的专有名称(“名称-价格”)输入的内容,以及一个标签来显示扫描的所有物品的总价格。我想这有点像一家商店。我曾尝试使用Split和Sum,但没有得到任何回报。标签仍然显示0.00,列表框仅显示110011和文本框。实际上执行了应该的操作。运行代码时没有错误,因此它按预期运行。到目前为止,这是我的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace smart_cart
{
public partial class List : Form
{
private object itemlist;
private object sum;
public object Next { get; private set; }
public object ListBox1 { get; private set; }
public List()
{
InitializeComponent();
}
private void label1_Click(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void label1_Click_1(object sender, EventArgs e)
{
label1.Text = sum.ToString();
}
private void textBox1_KeyPress_1(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 13)
this.textBox1.AppendText((sender as ComboBox).Text);
e.Handled = true;
{
}
}
private void listBox1_KeyPress(object sender, KeyPressEventArgs e)
{
}
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Enter)
{
listBox1.Items.Add(textBox1.Text);
}
}
private void button2_Click(object sender, EventArgs e)
{
listBox1.Items.Remove(listBox1.SelectedItem);
}
private void List_Load(object sender, EventArgs e)
{
Dictionary<string, string> Itemlist = new Dictionary<string, string>();
Itemlist.Add("Bread - 1.49", "110011");
Itemlist.Add("Shampoo - 4.99", "110022");
Itemlist.Add("TV - 200.00", "110033");
}
private void listBox1_SelectedIndexChanged_1(object sender, EventArgs e)
{
var sum = listBox1.Items
.OfType<string>()
.Select(s => Convert.ToInt32(s.Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries)[1]))
.Sum();
}
}
}
感谢您的帮助和建议。等待重播时,我会一直寻找答案。
答案 0 :(得分:1)
由于OP是一个初学者,所以他可能不熟悉OOP概念,因此为了使您的简单项目与字典一起工作,您需要做的就是在Dictionary<string, string> Itemlist = new Dictionary<string, string>();
外部声明List_Load
,以便变量范围将覆盖整个List
类。
例如:
Dictionary<string, string> Itemlist = new Dictionary<string, string>();
private void List_Load(object sender, EventArgs e)
{
Itemlist.Add("110011", "Bread - 1.49");
Itemlist.Add("110022", "Shampoo - 4.99");
Itemlist.Add("110033", "TV - 200.00");
}
正如您在上面看到的,我将参数的位置交换为Add
,因为它接受键值然后是键值。我希望将“ 110011”作为密钥,而不是“面包-1.49”。
现在,在应用程序中的任何位置,如果要从字典中获取值,都可以使用以下命令:
if (Itemlist.ContainsKey(key))
{
string value = Itemlist[key];
string[] split = value.Split('-');
string label = split[0].Trim();
double price = double.Parse(split[1]);
// do something
}
else
{
// do something?
}
答案 1 :(得分:0)
发生这种情况是因为您在本地的sum
方法中定义了listBox1_SelectedIndexChanged_1
变量,该变量隐藏了全局sum
变量。只需删除var
关键字即可。您的方法应如下所示:
private void listBox1_SelectedIndexChanged_1(object sender, EventArgs e)
{
sum = listBox1.Items
.OfType<string>()
.Select(s => Convert.ToInt32(s.Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries)[1]))
.Sum();
}
答案 2 :(得分:0)
我认为在您的情况下事件已触发
我尝试了一下,它奏效了。
SELECT t1.row_no ,t1.part_no ,t1.Qty_A ,t2.Qty_B
FROM
(SELECT 1 as row_no,'A' as part_no,100 as Qty_A) as t1
full OUTER JOIN
(SELECT 1 as row_no, 'B' as part_no,200 as Qty_B) as t2
ON t1.row_no = t2.row_no and t1.part_no = t2.part_no