c#将不同的变量传递给按钮onClick事件

时间:2017-06-02 11:11:27

标签: c# winforms

我需要在button_Click事件上使用不同的变量。对于每个按钮,我需要不同的billDetail和rowAmount值。实际上每个按钮都给出var size的最后一个值。 我认为这是一个简单的问题,但我这样做是为了爱好......请帮助我!

private void CashCounter_Load(object sender, EventArgs e)
{
    var posXbutton = 120;
    var posYbutton = 10;
    var gapXbutton = 105;
    var gapYbutton = 65;
    var posXlabel = 5;
    var posYlabel = 28;
    var gapYlabel = 65;

    using (var db = new GelatoProjectDBEntities())
    {
        #region working code
        var items = (from x in db.ProductsLists
                    select new { x.Id, x.Product, x.Category, x.Size, x.Price, x.Market, x.Image }
                    ).Where(x => x.Market == "Retail")
                    .ToArray();

        var categories = (from x in items
                          select x.Category)
                          .Distinct();

        foreach (var category in categories)
        {
            TabPage TabProduct = new TabPage(category);
            TabProduct.BackColor = System.Drawing.Color.White;
            tabControl1.TabPages.Add(TabProduct);

            var products = (from i in items
                            where i.Category == category
                            select i.Product)
                            .Distinct()
                            .ToList();
            foreach (var product in products)
            {
                string labelName = "label" + product;
                var label = new Label();
                label.AutoSize = false;
                label.Location = new System.Drawing.Point(posXlabel, posYlabel);
                label.Name = labelName;
                label.Size = new System.Drawing.Size(110, 17);
                label.TabIndex = 0;
                label.Text = product;
                label.RightToLeft = RightToLeft.Yes;
                posYlabel = posYlabel + gapYlabel;
                TabProduct.Controls.Add(label);

                var sizes = (from i in items
                            where i.Product == product
                            //select i.Size)
                            select new { i.Id, i.Product, i.Category, i.Size, i.Price, i.Market, i.Image })
                            .Distinct()
                            .ToList();

                foreach (var size in sizes)
                {
                    BillDetail = size.Size+" "+product;
                    BillTotal = "£   "+size.Price;
                    RowAmount = size.Price;
                    string buttonName = "button" + product;
                    var button = new Button();
                    button.Location = new Point(posXbutton, posYbutton);
                    button.Name = buttonName;
                    button.Size = new Size(100, 50);
                    button.Text = size.Size;
                    button.BackColor = System.Drawing.Color.LightGray;
                    button.Click += new System.EventHandler(button_Click);
                    posXbutton = posXbutton + gapXbutton;
                    TabProduct.Controls.Add(button);
                }
                posXbutton = 120;
                posYbutton = posYbutton + gapYbutton;
            }
            posXbutton = 120;
            posYbutton = 10;
            gapXbutton = 105;
            gapYbutton = 65;
            posXlabel = 5;
            posYlabel = 28;
            gapYlabel = 65;
        }
    }
#endregion
}

private void button_Click (object sender, EventArgs e)
{
    ListViewItem NewBillProduct = new ListViewItem(BillDetail);
    NewBillProduct.SubItems.Add("£");
    NewBillProduct.SubItems.Add(RowAmount.ToString("F"));
    listViewBillDetail.Items.Add(NewBillProduct);

    BillTotalAmount = BillTotalAmount + double.Parse(RowAmount.ToString("F"));
    ItemsTotal = ItemsTotal + 1;
    textBoxTotal.Text = (BillTotalAmount.ToString("C", nfi)).ToString();
    textBoxItems.Text = (ItemsTotal).ToString();
}

1 个答案:

答案 0 :(得分:1)

您可以使用Tag的{​​{1}}属性在那里存储相关的Button对象:

Size

然后在click事件处理程序中,您可以检索此对象:

 button.Tag = size;

注意:如果您将这些对象放入数组或列表中,则可以在private void button_Click (object sender, EventArgs e) { var button = (Button)sender; var size = (Size)button.Tag; // use size.Size or size.Price // etc } 中存储多个对象。