как создать список событий для списка кнопок c #? - PullRequest
0 голосов
/ 25 июня 2018

У меня есть список кнопок ... но я хочу сделать события для каждой кнопки в списке - я попробовал этот код

ButtonName.Click += (sender, args) =>
            {
                Point p = new Point(20 * j, 70);
                Product[j].Location = p;
                Product[j].Width = 200;
                Product[j].Height = 250;
                this.Controls.Add(Product[j]);
            };

событие, которое я хочу сделать, это когданажмите на любую кнопку, она должна показать список, связанный с этой кнопкой.и у каждого списка есть свои данные .... единственная проблема, которую я хочу получить, - это создать событие для каждой кнопки в списке, это возможно ??

Обновление

for (int j = 0; j < Data.BTN_Name.Count; j++) 
{ 
   Category[j].Click += (sender, args) => 
     { 
        Point p = new Point(20 * j, 70); 
        Product[j].Location = p; 
        Product[j].Width = 200; 
        Product[j].Height = 250; 
        this.Controls.Add(Product[j]); 
      }; 

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Как я вижу, вы на самом деле пытаетесь привязать какую-то кнопку к некоторому списку. Как сказал @TheGeneral, вы можете использовать свойство кнопки Tag, но такой подход мне не нравится (хотя он имеет право быть, это просто привычка). Вот мой пример:

public class YourForm : Form
{
    private IDictionary<Button, ListBox> _listboxes = new Dictionary<Button, ListBox>();

    // use this if you create a button and listbox simultaneously
    protected void CreateButtonAndList()
    {
        var listbox = new ListBox();
        // initialize listbox as needed
        var button = new Button();
        // initialize button as needed
        button.Click += ButtonClickHandler;
        _listboxes.Add(button, listbox);
    }

    // use this if you create a button for already existing listbox
    protected void CreateButtonFor(ListBox listbox)
    {
        var button = new Button();
        // initialize button as needed
        button.Click += ButtonClickHandler;
        _listboxes.Add(button, listbox);
    }

    private void ButtonClickHandler(object sender, EventArgs e)
    {
        var listbox = _listboxes[sender];
        // do what you want with listbox
    }
}

Также обратите внимание, что вам, вероятно, не нужны оба метода CreateButtonAndList() и CreateButtonFor(). Вы можете оставить только тот, который соответствует вашим потребностям.

0 голосов
/ 25 июня 2018

Мне кажется, что вы хотите сделать это:

        for (int j = 0; j < Data.BTN_Name.Count; j++)
        {
            Product[j] = new ListBox()
            {
                Location = new Point(20 * j, 70),
                Width = 200,
                Height = 250,
                Visible = false,
            };
            this.Controls.Add(Product[j]);
            var captured_j = j;
            Category[j].Click += (s, ea) => Product[captured_j].Visible = true;
        }

Вы должны захватить переменную j, чтобы использовать ее в обработчике событий - отсюда и код var captured_j = j; непосредственно перед обработчиком событий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...