C#:如何将字典用于简单的库存应用程序

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

            }


感谢您的任何帮助和建议。在等待重播的同时,我将继续寻找答案。


catspeake
浏览 199回答 3
3回答

慕雪6442864

由于 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){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; Itemlist.Add("110011", "Bread - 1.49");&nbsp; &nbsp; Itemlist.Add("110022", "Shampoo - 4.99");&nbsp; &nbsp; Itemlist.Add("110033", "TV - 200.00");}正如您在上面看到的,我将参数的位置交换为 ,Add因为它接受一个键然后是值。我宁愿将“110011”作为我的键,而不是“Bread - 1.49”。现在,如果您想从字典中获取值,您可以在应用程序的任何地方使用以下命令:if (Itemlist.ContainsKey(key)){&nbsp; &nbsp; string value = Itemlist[key];&nbsp; &nbsp; string[] split = value.Split('-');&nbsp; &nbsp; string label = split[0].Trim();&nbsp; &nbsp; double price = double.Parse(split[1]);&nbsp; &nbsp; // do something}else{&nbsp; &nbsp; // do something?}

狐的传说

我认为在你的情况下,事件被触发我试过了,它奏效了。&nbsp; &nbsp; private void Form1_Load(object sender, EventArgs e)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; textBox1.KeyDown += new KeyEventHandler(tb_KeyDown);&nbsp; &nbsp; }&nbsp; &nbsp; static void tb_KeyDown(object sender, KeyEventArgs e)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; if (e.KeyCode == Keys.Enter)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MessageBox.Show(" some junk");&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }

梵蒂冈之花

发生这种情况是因为您sum在listBox1_SelectedIndexChanged_1本地方法中定义了隐藏全局sum变量的变量。只需删除var关键字即可。您的方法应如下所示:private void listBox1_SelectedIndexChanged_1(object sender, EventArgs e){&nbsp; &nbsp; sum = listBox1.Items&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .OfType<string>()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .Select(s => Convert.ToInt32(s.Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries)[1]))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .Sum();}
打开App,查看更多内容
随时随地看视频慕课网APP