每次单击特定按钮时按钮[]的不同功能

时间:2014-12-21 15:07:27

标签: c# winforms button buttonclick

我有一个动态创建的按钮数组,假设有8个按钮,我想要的是当我点击某个特定按钮时,它的背景图片被更改,按钮的名称存储在一个链接列表中。当我再次单击相同的按钮时,背景图片将返回到原始图像,并从链接列表中删除按钮名称。现在我能够完成第一部分,第二次点击不能正常工作。

基本上它是一个数据结构项目(购物商店)因此我使用链表,我有一个链表,其内容通过图片框[]和标签显示。这里我要做的是当我点击图片框时,该特定节点的内容被添加到新的链接列表(添加到购物车),当我再次点击图片框时,该特定项目将从链接中删除列表(从购物车中删除)。点击它第一次它正在做我想要它做的事情,但第二次点击不是真的有效。

这是一个数据结构项目,因此我不能真正使用任何内置类的链表,我必须自己编写所有方法,我做了,他们工作。

cb[i].Click += (sender, e)=>{

if (flag == 0) {
   // Console.WriteLine(obj.Retrieve(index).NodeContent);
   // Console.WriteLine(obj.Retrieve(index).number);
   inv.Add(obj.Retrieve(index).NodeContent, obj.Retrieve(index).number);
   bill += Convert.ToInt32(obj.Retrieve(index).number);
   cb[index].Image = Image.FromFile(@"F:\uni work\3rd semester\project images\rcart.jpg");
   flag++;
}
else if (flag == 1)
{
   // Console.WriteLine(bill);
   bill -= Convert.ToInt32(obj.Retrieve(index).number);
   // Console.WriteLine(bill);
   inv.Delete(index);
   cb[index].Image = Image.FromFile(@"F:\uni work\3rd semester\project images\cart.png");
   flag--;
}

2 个答案:

答案 0 :(得分:0)

为什么不为每个按钮创建一个类,包含两个图像并在每次单击时在它们之间切换?

答案 1 :(得分:0)

由于您使用的是LinkedList,因此它具有Contains方法和带有字符串的Remove方法。您还没有明确指出您应该解决的问题。将图像分配给控件时,会丢失告诉您图像是什么的信息。

public partial class Form1 : Form
{
    LinkedList<String> myList = new LinkedList<String>();
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        for (int i = 0; i < 8; i++)
        {
            Button b = new Button() { Height = 30, Width = 70, Location = new Point(i, 50 * i),Name = "NewButton" + (i + 1).ToString() , Tag=i};
            b.Click += b_Click;
            this.Controls.Add(b);
        }
    }

    void b_Click(object sender, EventArgs e)
    {
       Button b = (Button)sender;
        if(myList.Contains(b.Name)) //Check if button is in the List then Change Picture and remove
        {
            b.BackgroundImage = Properties.Resources.Peg_Blue;
            myList.Remove(b.Name);
        }
        else
        {
            b.BackgroundImage = Properties.Resources.Peg_Red;
            myList.AddLast(b.Name);
        }


    }
}