您好,我正在制作带有面板的10x10立方体,当您单击面板的X倍但代码太大时,面板需要更改颜色,是否还有另一种方法可以使代码不那么长?
这是我的代码:
int cont1 = 0, cont2 = 0, cont3 = 0, cont4 = 0, cont5 = 0, cont6 = 0, cont7 = 0, cont8 = 0, cont9 = 0, cont10 = 0;
然后更改颜色的事件(我所有的面板都有相同的代码,但区别是“续”和面板名称):
private void panel1_MouseClick(object sender, MouseEventArgs e)
{
cont1++;
if (cont1 <= 5)
{
panel1.BackColor = Color.SlateBlue;
}
if (cont1 >=5)
{
panel1.BackColor = Color.Cyan;
}
if (cont1 >= 10)
{
panel1.BackColor = Color.Lime;
}
if (cont1 >= 15)
{
panel1.BackColor = Color.Yellow;
}
if (cont1 >= 20)
{
panel1.BackColor = Color.Red;
}
}
//other panel
private void panel2_MouseClick(object sender, MouseEventArgs e)
{
cont2++;
if (cont2 <= 5)
{
panel2.BackColor = Color.SlateBlue;
}
if (cont2 >= 5)
{
panel2.BackColor = Color.Cyan;
}
if (cont2 >= 10)
{
panel2.BackColor = Color.Lime;
}
if (cont2 >= 15)
{
panel2.BackColor = Color.Yellow;
}
if (cont2 >= 20)
{
panel2.BackColor = Color.Red;
}
}
注意:每个面板的颜色都不同,不是同时改变的。实际上可以使用4x4,但10x10对我来说却很大
实际上,您不需要创建大量变量,因为您需要跟踪控制状态。您可以利用控件标签的存在并减少编写的代码量。
如果是1000 x 1000面板,则以下方法将完美适用于您的用例。您需要做的就是将所有目标面板
mouseClick
指向该面板,并让其处理其余的面板。
private void panel_MouseClick(object sender, MouseEventArgs e)
{
Control ctrl = sender as Control;
//get previous value from control tag or start at 0
int count = ctrl.Tag == null ? 0 : (int)ctrl.Tag;
//set backcolor of control based on tag number
if (count >= 20) ctrl.BackColor = Color.Red;
else if (count >= 15) ctrl.BackColor = Color.Yellow;
else if (count >= 10) ctrl.BackColor = Color.Lime;
else if (count >= 5) ctrl.BackColor = Color.Cyan;
else ctrl.BackColor = Color.SlateBlue;
// if (count == xx)
//{// you may want to reset count after a certain number. Do that here...}
ctrl.Tag = ++count;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句