C#:如何为简单的清单应用程序使用字典

时间:2018-08-15 04:03:50

标签: c# visual-studio

我是编程和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();
        }
    }
    }

感谢您的帮助和建议。等待重播时,我会一直寻找答案。

3 个答案:

答案 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