Переход от одной кнопки к другой, когда у них одинаковые имена - PullRequest
0 голосов
/ 15 мая 2019

Я делаю игру Mastermind, где вам нужно угадать секретный код с цветами.

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

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

Button btn = (Button)sender;
if (btn.Text == "Red")
{
    // I want it to automatically go to Colour2 next, 
    // instead of me having to write it a bunch of times
    Colour1.BackColor = Color.Red;        
}

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

Спасибо за помощь.

1 Ответ

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

Используя ваш существующий код в качестве примера, вы можете проанализировать текст с кнопки в правильное значение перечисления (предполагая, что значение Text является известной строкой перечисления цвета), используя статический метод Enum.TryParse, который пытается проанализироватьстрока для перечисления.Если анализ выполнен успешно, он возвращает true и устанавливает для параметра out проанализированное значение:

Color selectedColor;

if (Enum.TryParse((sender as Button).Text, out selectedColor))
{
    Colour1.BackColor = selectedColor;
}

Если вы уверены, что свойство Text всегда будет действительным цветом (что вы должны быть, так как вы управляете им), то вы можете уменьшить это до одной строки, используя статический метод Enum.Parse, который принимает тип enum для возврата и строковое значение для анализа:

Colour1.BackColor = Enum.Parse(typeof(Color), (sender as Button).Text);

В качестве альтернативы, вместо использования свойства Text, вы можете использовать сам задний цвет кнопки, чтобы присвоить значение (при условии, что вы установили для него тот же цвет, что и у текста):

Color1.BackColor = (sender as Button).BackColor;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...