Вопрос:
Я пытаюсь создать массив кнопок 8×8, и пока это работает.
Теперь я наткнулся на проблему.
Я хочу, чтобы цвет кнопки (backcolor) менялся при нажатии. И при повторном нажатии измените цвет на другой.
Это мой код:
namespace WindowsFormsApplication2 { public partial class Form1 : Form { Button[,] btn = new Button[8,8]; public Form1() { InitializeComponent(); for (int x = 0; x < btn.GetLength(0); x++) { for (int y = 0; y < btn.GetLength(1); y++) { btn[x,y] = new Button(); btn[x,y].SetBounds(40 * x, 40 * y, 40, 40); btn[x,y].Click += new EventHandler(this.btnEvent_click); Controls.Add(btn[x, y]); btn[x,y].BackColor = Color.Black; } } /* btn.Click += new EventHandler(this.btnEvent_click); btn[x,y].Text = Convert.ToString(x+»,»+y); Controls.Add(btn); btn[x,y].Click += new EventHandler(this.btnEvent_click); */ } private void form1_load(object sender, EventArgs e) { } void btnEvent_click(object sender, EventArgs e) { (Control)sender).BackColor = Color.Red; } } }
Пока я могу только изменить цвет на красный, и я попробовал несколько операторов if и для изменения цвета во второй раз.
Может ли кто-нибудь помочь мне?
Лучший ответ:
Привет Временный вы можете использовать ниже решение:
void btnEvent_click(object sender, EventArgs e) { Control ctrl = ((Control)sender); switch (ctrl.BackColor.Name) { case «Red»: ctrl.BackColor = Color.Yellow; break; case «Black»: ctrl.BackColor = Color.White; break; case «White»: ctrl.BackColor = Color.Red; break; case «Yellow»: ctrl.BackColor = Color.Purple; break; default: ctrl.BackColor = Color.Red; break; } }
Я знаю, что может быть и лучшее решение, но пока вы можете пойти с этим… вы можете добавить больше цветов и в статусе переключения по мере необходимости
Ответ №1
Вы можете создать новый класс, наследовать от Button и внутренне изменять цвет, что-то вроде этого:
class TwoColorButton : Button { private int stateCounter = 0; private Color[] states = new Color[] { Color.Black, Color.Red }; public TwoColorButton() : base() { this.BackColor = states[stateCounter]; this.Click += this.clickHandler; } protected void clickHandler(object sender, EventArgs e) { stateCounter = stateCounter == 0 ? 1 : 0; this.BackColor = states[stateCounter]; } } Ответ №2
Вы можете использовать метод Color.FromArgb(int) и Random. См. Ниже:
Random rnd = new Random(); //Alpha set allways 255 Color.FromArgb(255, rnd.Next(255), rnd.Next(255), rnd.Next(255)); //Or Completly random Color.FromArgb(rnd.Next()); Ответ №3
Вы пробовали что-то похожее?
void btnEvent_click(object sender, EventArgs e) { if ((Control)sender).BackColor != Color.Red) (Control)sender).BackColor = Color.Red; else (Control)sender).BackColor = Color.Green; } Ответ №4
Попробуйте.. его работающий…
Внутри кнопки1 щелкните событие:
Random randomGen = new Random(); KnownColor[] names = (KnownColor[])Enum.GetValues(typeof(KnownColor)); KnownColor randomColorName = names[randomGen.Next(names.Length)]; Color randomColor = Color.FromKnownColor(randomColorName); button1.BackColor = randomColor; Ответ №5
вы всегда можете создать класс, который наследует класс кнопки, а затем добавить счетчик к нему, например, как часто его кликали, а затем вставлять его при каждом нажатии, а затем изменять цвет в соответствии с этим нажатием
Ответ №6
Вы можете попробовать что-то вроде этого, если хотите “циклично” с помощью фиксированного набора цветов:
void btnEvent_click(object sender, EventArgs e) { var button = (Button)sender; switch(button.BackColor) { case Color.Black: { button.BackColor= Color.Red;} break; case Color.Red: { button.BackColor= Color.Blue;} break; case Color.Blue: { button.BackColor= Color.Green;} break; // and so on … don’t forget the default clause, just in case default: { button.BackColor= Color.Black;} break; } }