По клику на кнопку поменять ее цвет

198
26 июля 2018, 18:20

Есть 2 кнопки, с 1 кнопки мы создаем 2 кнопку вот так:

private static int X = 100;
private static int Y = 100;
System.Windows.Forms.Button buttonDyn
private void buttonDynamic_Click(object sender, EventArgs e)
{
    AddButton(X, Y);
    X += 100;
}
private void AddButton(int x, int y)
{
    // создаем контрол
    buttonDyn = new     System.Windows.Forms.Button(); 
    // устанавливаем необходимые свойства
    buttonDyn.Location = new System.Drawing.Point(x, y);           
    buttonDyn.Name = "button1";
    buttonDyn.Size = new System.Drawing.Size(75, 23);
    buttonDyn.TabIndex = 0;
    buttonDyn.UseVisualStyleBackColor = true;
    // button1_Click - функция обработчик события нажатия на кнопку
    buttonDyn.Click += new System.EventHandler(buttonDyn_Click); 
    Controls.Add(buttonDyn); // добавляем на форму
    //вот здесь меняем цвет кнопки
    buttonDyn.BackColor = Color.Chartreuse;
}

При нажатии на 2 кнопку (которую мы создали динамически) кнопка 1 и кнопка 2 должны поменять цвет:

private void buttonDyn_Click(object sender, EventArgs e)
    {
        buttonDynamic.BackColor = Color.DarkBlue;
        buttonDyn.BackColor = Color.DarkBlue;
    }

Но цвет меняется только на первой кнопке. Предполагаю что программа не понимает к какой кнопке это относится. buttonDynamic ведь создается динамически и их может быть много. Тогда как решить эту задачу?

Answer 1

Все просто, в обработчиках событий для этого предусмотрен параметр sender. sender всегда (не считая экзотических реализаций и ошибок) содержит ссылку на объект, который это событие инициировал.

private void buttonDyn_Click(object sender, EventArgs e)
{
    //по коду выше это постоянная кнопка
    buttonDynamic.BackColor = Color.DarkBlue;
    //для динамических меняем
    //buttonDyn.BackColor = Color.DarkBlue;
    //на
    (sender as Button).BackColor = Color.DarkBlue; 
}

и верните buttonDyn обратно к состоянию локальной переменной, от этого поля ни какой пользы, только путаница.

READ ALSO
Visual Studio - добавить ссылку на проект

Visual Studio - добавить ссылку на проект

Мне нужно добавить ссылку на проектДействую согласно документации https://msdn

214
Встроить Control (InputBox или Button) в TaskBar Windows

Встроить Control (InputBox или Button) в TaskBar Windows

Есть задача встроить элемент управления в панель задач Windows, но я не знаю как это реализоватьМожет кто подскажет в какую сторону смотреть...

168
Почему нельзя использовать StreamReader вместе с NetworkStream?

Почему нельзя использовать StreamReader вместе с NetworkStream?

В книге Албахари "C# 60 in a Nutshell" написано следующее:

209
Медленная отрисовка TreeView C#,

Медленная отрисовка TreeView C#,

Использую стандартный treeViewУзлы добавил через свойства компонента Nodes -> Edit Nodes

171