Как выбрать одну кнопку за раз в группе кнопок в .NET Winforms - PullRequest
1 голос
/ 03 ноября 2019

Я создал пользовательский button control и хочу, чтобы он вел себя как RadioButtons в группе. Кнопка будет помещена в группу или коллекцию ее типа на тот же container или panel (кнопка перетаскивалась на контейнер). Когда я нажимаю любую из этих кнопок, мне нужно, чтобы произошло следующее:

  1. Измените BackColor нажатой кнопки на предопределенный цвет: Color.Cycan;

  2. Установите проверенное состояние нажатой кнопки с false на true

  3. Убедитесь, что все остальные кнопки того же типа на той же панели / контейнереустановить их настройки по умолчанию: BackColor = Color.Gray; checked = false;

Я пробовал ниже code, но я получаю этот результат:

  1. BackColor нажатой кнопки успешно изменяется на Color.Cycan;

  2. Значение по умолчанию BackColor всех других кнопок того же типа включенотот же контейнер успешно устанавливается по умолчанию: Color.Gray;

  3. Но checked state нажатой кнопки не меняется на true. Он остается false.

Я приложил код, который я пробовал, ниже:

В чем может быть проблема или где я упускаю суть?

Это кнопка управления Winform / Windows Forms, и я программирую на C#.

Я не хочу использовать переключатель для этого, потому что у меня есть пользовательский дизайн MyButton.

Спасибо.

Это код, который я пробовал:

//Вызов ClickedButton ();по событию клика.

private bool checked = false;
private void ClickedButton()
{

do(

BackColor = Color.Cycan;
checked = true;

if(Parent == null)
break;

foreach(MyButton button in Parent.Controls.OfType<MyButton>())
{

if(button == this) { continue }

else{

BackColor = Color.Gray;
checked = false;
}
}

)
while(false)
}

1 Ответ

3 голосов
/ 04 ноября 2019

Как насчет использования этого метода?

private bool isSelected = false;

private Color activeColor = Color.FromArgb(117, 117, 117);
private Color defaultColor = Color.FromArgb(66, 66, 66);

private void ClickedButton()
{
    foreach (Control parentControl in Parent.Controls)
    {
        if (parentControl is MyButton parentButton)
        {
            parentButton.isSelected = false;
            parentButton.BackColor = parentButton.isSelected ? parentButton.activeColor : parentButton.defaultColor;
        }
    }

    this.isSelected = true;
    this.BackColor = isSelected ? activeColor : defaultColor;
}

Он работает следующим образом.

buttonTest

...