如何以相同的行为制作不同的面板?

哈维尔王牌

您好,我正在制作带有面板的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对我来说却很大

吉迪·纳亚(Giddy Naya)

实际上,您不需要创建大量变量,因为您需要跟踪控制状态。您可以利用控件标签的存在并减少编写的代码量。

如果是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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何制作与面板相同尺寸的图像?

如何以编程方式制作带有控件的面板的克隆?

如何以相同的顺序维护手风琴面板?

如何在 angular 8 中制作相同材质的 sidenav 行为?

相同的查询,不同的行为

如何以不同的名称安装相同的库

CSS相同的类不同的行为

如何以相同的方法使用不同的按钮以获得不同的结果?

为什么Python 3的PrettyPrinter的行为与Python 2的不同,我如何获得相同的行为?

如何以编程方式滚动流面板

不同语言的相同代码的不同行为

如何在闪亮的不同选项卡面板上使用相同的输出绑定

如何获得具有不同y轴长度的相同面板宽度

在 R Shiny 中,如何从不同的条件面板控制相同的对象?

如何在html中制作具有响应行为的不同部分

如何以相同的div居中放置两条不同大小的水平线?

Java-XPath-如何以相同方式管理不同的表达式

我如何以不同的方式设置两个相同类的 div?

CPLEX如何以相同的成本获得所有不同的最佳解决方案

如何以最佳方式在不同的分析功能上使用相同的Windows分区?

如何以不同的格式过滤具有相同日期的行

如何以相同的概率向访问者随机显示网站的不同版本?

如何以一种方法更改不同对象的相同属性?

如何制作固定高度的Bootstrap面板主体

如何制作水平滚动面板或转盘?

如何制作输出目录选择面板?

流布局面板-如何制作动画

如何以同步方式制作Promise API?

AngularJs:如何以时间格式制作秒表