为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
catspeake 2021-11-28 18:48:33
我是编程和 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);            }感谢您的任何帮助和建议。在等待重播的同时,我将继续寻找答案。
查看完整描述

3 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

由于 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”作为我的键,而不是“Bread - 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?

}


查看完整回答
反对 回复 2021-11-28
?
狐的传说

TA贡献1804条经验 获得超3个赞

我认为在你的情况下,事件被触发


我试过了,它奏效了。


    private void Form1_Load(object sender, EventArgs e)

    {

        textBox1.KeyDown += new KeyEventHandler(tb_KeyDown);

    }


    static void tb_KeyDown(object sender, KeyEventArgs e)

    {

        if (e.KeyCode == Keys.Enter)

        {

           MessageBox.Show(" some junk");

        }

    }


查看完整回答
反对 回复 2021-11-28
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

发生这种情况是因为您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();

}


查看完整回答
反对 回复 2021-11-28
  • 3 回答
  • 0 关注
  • 196 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信