2014-12-21 2 views
-1

У меня есть набор кнопок, созданных динамически, предположим, что 8 кнопок, что я хочу, так это, когда я нажимаю на определенную кнопку, его фоновое изображение изменяется и имя кнопки хранится в связанном списке. Когда я снова нажимаю ту же кнопку, фоновое изображение возвращается к оригиналу, а имя кнопки удаляется из связанного списка. Теперь я могу сделать первую часть, второй щелчок не работает так, как я хочу.Различные функции кнопки [] при каждом нажатии на конкретную кнопку

В основном это проект структур данных (торговый магазин), поэтому я использую связанный список, у меня есть связанный список, содержимое которого отображается через коробки изображений [] и метки. Здесь то, что я пытаюсь сделать, - это когда я нажимаю рамку с изображением, содержимое этого конкретного узла добавляется в новый связанный список (добавляется в корзину), и когда я нажимаю на окно с картинками, этот конкретный элемент удаляется из связанного (удаляется из корзины). Нажав его в первый раз, он делает то, что я хочу, но второй щелчок не работает.

Это проект datastructures, поэтому я не могу использовать какие-либо встроенные классы для связанного списка, мне пришлось писать все методы самостоятельно, и я это сделал, и они работают.

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

С чем вы столкнулись? удалить изображение или удалить элемент из LinkedList? –

+0

Просьба пояснить, являются ли это WinForms, веб-формами ASP.NET и т. Д. Подробно о том, что вы делаете или чего не делаете, и о том, что вы пробовали до сих пор. Включите примеры кода, если это возможно, рассмотрите минимальный воспроизводимый образец в https://dotnetfiddle.net/ – pwdst

ответ

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); 
     } 


    } 
} 
0

Почему бы не создать класс для каждой кнопки, содержащий два изображения и переключаться между ними при каждом нажатии?