Кнопки в приложении Visual Studios формы - PullRequest
2 голосов
/ 21 сентября 2011

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

Я пытаюсь написать приложение, которое имеет около 30 кнопок. Одна общая вещь, которую я хочу, чтобы все кнопки стали желтыми при нажатии. Если их щелкнуть во второй раз, они вернутся к цвету по умолчанию. сейчас я использую код:

private void btn_1_Click(object sender, EventArgs e)
{
    btn_1.BackColor = Color.Yellow;
}

Но это только приводит к желтому цвету кнопок, я не могу выключить их, щелкнув по нему второй раз.

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

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

Извините за нубские вопросы. БЛАГОДАРЯ

Ответы [ 7 ]

2 голосов
/ 21 сентября 2011

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

Например:

private void btn_1_Click(object sender, EventArgs e)
{
    ToggleColor((Button)sender);
    //rest of the code specific to this button
}

private void ToggleColor (Button button)
{
     if(button.Color==Color.Yellow;
         button.Color=Color.Black;
     else 
         button.Color=Color.Yellow;
}

Обратите внимание, что приведенный выше код не проверен.

Теперь, если все кнопки выполняют одно и то же действие, вы можете просто нажатьобработчики для всех них должны быть btn_1_Click;например.

1 голос
/ 21 сентября 2011
private void btn_1_Click(object sender, EventArgs e)
{
    if (btn_1.BackColor != Color.Yellow)
    {
        btn_1.BackColor = Color.Yellow
    }
    else
    {
        btn_1.BackColor = Color.Control;
    }
}

это переключение по умолчанию и желтый

0 голосов
/ 22 сентября 2011

Чтобы все кнопки использовали один и тот же обработчик событий в VS2010:

Нажмите один раз на кнопку, чтобы выбрать ее.

В окне «Свойства»: нажмите на «молнию» (= события).

Вставьте имя события первой кнопки (btn_1_Click) рядом с «Кликом».

Сделайте то же самое для каждой кнопки.

Как и для измененияЦвет: см. ответ killie01.

Удачи.

0 голосов
/ 21 сентября 2011

Да:

  1. Создайте собственный класс кнопок
  2. Наследуйте от Button
  3. Реализуйте обработчик в своем классе кнопок, и все готово

Вы можете сделать что-то простое, как это:

public class MyButton : Button
{
    private bool _buttonState;

    protected override void OnClick(EventArgs e)
    {
        base.OnClick(e);

        if (_buttonState)
        {
            BackColor = Color.Yellow;
        }
        else
        {
            BackColor = Color.White;
        }
    }
}

Затем в своем коде вы можете просто создать столько объектов "MyButton", сколько вам нужно, без повторения кода.

0 голосов
/ 21 сентября 2011

Чтобы отследить, нажимаете ли вы кнопку «второй раз», вы должны объявить переменную ВНЕ метода, которая указывает, нажали вы кнопку или нет.

Например:

public bool IsButtonYellow;
private void btn_1_Click(object sender, EventArgs e) {
    if(!IsButtonYellow) {
    btn.BackColor = Color.Yellow;
    IsButtonYellow = true;
    }
    else {
    btn.BackColor = Control.DefaultBackColor;
    IsButtonYellow = false;
    }
}
0 голосов
/ 21 сентября 2011

Вам не нужно писать свой собственный класс.Вы можете просто назначить все свои кнопки одному и тому же обработчику событий, например:

button1.Click += new EventHandler(myEventHandler);
button2.Click += new EventHandler(myEventHandler);
button3.Click += new EventHandler(myEventHandler);
button4.Click += new EventHandler(myEventHandler);

Просто имейте в виду, что ваш обработчик событий имеет такую ​​подпись:

private void myEventHandler(object sender, EventArgs e)

Выполняя это,все ваши кнопки при нажатии будут вызывать один и тот же метод.

Теперь, чтобы контролировать цвет, вы можете создать на форме простое свойство, которое будет содержать последний примененный цвет.Это может быть перечисление, тогда вы можете просто проверить его значение и применить другое к кнопкам, например:

// Declare your enum:
private enum Colors { Yellow, Default }

private Colors ActualColor = Colors.Default;


// Write your custom event handler:
private void myEventHandler(object sender, EventArgs e)
{
    if (ActualColor == Colors.Default)
    {
        // Apply yellow to buttons
        ActualColor = Colors.Yellow;
    }
    else
    {
        // Apply default
        ActualColor = Colors.Default;
    }            
}
0 голосов
/ 21 сентября 2011

Если все кнопки выполняют одно и то же, вы можете назначить один и тот же обработчик событий всем кнопкам (вместо btn_1_Click, btn_2_Click и т. Д. У вас будет btton_click) - вы можете выбрать этот обработчик в свойствах каждой кнопки.

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