我有一个动态创建的按钮数组,假设有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--;
}
答案 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);
}
}
}