我正在尝试制作一个8x8按钮的数组,到目前为止它的工作原理。 现在我偶然发现了一个问题。 我希望按钮的颜色(背景色)在单击时更改。再次点击时更改为不同的颜色。
到目前为止,这是我的代码:
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和for语句,以便再次更改颜色。
有人可以帮帮我吗?
答案 0 :(得分:5)
嗨临时你可以使用以下解决方案:
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 :(得分:2)
你可以创建一个新类,从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 :(得分:1)
您可以使用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 :(得分:0)
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 :(得分:0)
试试吧..它的工作......
在button1点击事件中:
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 :(得分:0)
你总是可以创建一个继承按钮类的类,然后为它添加一个计数器,例如它点击的频率,然后在每次点击时加上它,然后根据点击更改颜色
答案 6 :(得分:0)
如果你想通过一组固定的颜色“循环”,你可以尝试这样的事情:
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;
}
}