Пользовательское действие динамической кнопки Windows Forms для каждой кнопки - PullRequest
0 голосов
/ 12 мая 2019

Я написал функцию AddItem, которая добавляет элемент в просмотр списка.Я также создал функцию для создания динамических кнопок.Но как только я создаю динамическую кнопку, мне бы хотелось, чтобы она работала при нажатии кнопки AddItem.

Я понятия не имею, как мне решить эту проблему, потому что я относительно новичок в C # и формах Windows.

    private void AddButton(string Name, string Text, int Posx, int Posy, double Price, string ItemName)
    {
        // Create a Button object 
        Button NewButton = new Button();

        // Set Button properties
        NewButton.Height = 50;
        NewButton.Width = 120;
        NewButton.BackColor = Color.Gainsboro;
        NewButton.ForeColor = Color.Black;
        NewButton.Location = new Point(Posx, Posy);
        NewButton.Text = Text;
        NewButton.Name = Name;
        NewButton.Font = new Font("Microsoft Sans Serif", 12);

        // Add a Button Click Event handler
        NewButton.Click += new EventHandler(NewButton_Click);

        //Add to form ontop of panelButtonHamburgers
        panelButtonsHamburgers.Controls.Add(NewButton);

    }

    private void NewButton_Click(object sender, EventArgs e)
    {
        AddItem(Price, ItemName);
    }

Как видите, функция AddButton принимает цену и имя элемента, после нажатия кнопки я бы хотел, чтобы функция additem работала с той же ценой и именем элемента.

Спасибо!

Ответы [ 2 ]

0 голосов

Насколько я понял, вам нужен манипулятор, который использует определенные значения для каждой динамической кнопки.Есть несколько подходов, которые вы можете использовать.

  1. Использовать свойство Tag и сохранять значения в каком-либо формате

    newBut.Tag = $"{Price},{ItemName}";
    

    и в обработчике

    //always check for null
    Button button = sender as Button;
    string data = button.Tag as string;
    //do staff with your data
    
  2. Создайте словарь и каждый раз, когда вы добавляете новую кнопку, добавляете ее в качестве ключа к словарю и в обработчике получаете ваши данные (но это один из худших способов сделать это, поэтому старайтесь избегать его);

  3. Использовать шаблон «Команда».Сделайте специальный класс для выполнения вашей операции.Это должно выглядеть следующим образом:

    class MyCommand
    {
            public double Price { get; set; }
            public string Name { get; set; }
            public ListView List { get; set; } //here is the list you want to add item to.
            public void Handle (object sender, EventArgs e)
            {
                    //Do your staff here
            }
    }
    

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

0 голосов
/ 12 мая 2019

Вы можете назначить кортеж для кнопки Tag.

private void AddButton(string Name, string Text, int Posx, int Posy, double Price, string ItemName)
{
    ...

    NewButton.Tag = (Price, ItemName);
}

Затем вы можете получить значения этого кортежа из sender в событии, которое фактически является кнопкой.

private void NewButton_Click(object sender, EventArgs e)
{
    double price = (((double Price, string ItemName))((Button)sender).Tag).Price;
    string itemName = (((double Price, string ItemName))((Button)sender).Tag).ItemName;

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