哈喽,你好啊,我是雷工!
关于大乐透选号器在前面已经记录了4篇笔记,这是第5篇;
上一篇实现了选号点击时球体变色,虽然能实现,但是方式不太优雅,特别是接下来需要清空选择时处理起来会比较麻烦;
所以接下来记录练习优化选择变色的功能代码,并增加【清空】按钮的功能记录;
以下为学习笔记。
01 优化显示①优化内容
为了使显示效果更好,将自动生成的选择球体上的数字颜色设置成灰色(Gray);
当点击选中时球体变色的同时将数字颜色修改为白色(White);
②实现方法
在初始化代码中增加如下语句:
lbl.ForeColor = System.Drawing.Color.Gray;在单击事件中增加如下语句:
lbl.ForeColor = System.Drawing.Color.White;③优化效果演示
02 优化代码上述功能的重复性有点高,有优化的空间;
可将红球区和蓝球区选择事件分别处理的方法优化成一个通用的方法;
2.1、设置红蓝色通用方法
//通用点击方法(设置成红色或蓝色)private void SetRedOrBlue(Label lbl, string color){ if (lbl.Tag.ToString().Equals("0"))//tag中的值表示颜色0-灰色; {lbl.Image = Image.FromFile($"Image/{color}.png");lbl.Tag = "1";lbl.ForeColor = System.Drawing.Color.White; }}2.2、设置灰色方法
//统一设置成灰色private void SetGray(Label lbl){ lbl.Image = Image.FromFile("Image/gray.png"); lbl.Tag = "0"; lbl.ForeColor = System.Drawing.Color.Gray;}2.3、红色区域单击事件
//红色区域单击事件(优化后)private void lblRed_Click(object sender,EventArgs e){ Label lbl = (Label)sender; if(lbl.Tag.ToString().Equals("0"))//tag中的值表示颜色0-灰色;1-红色; {SetRedOrBlue(lbl, "red"); } else {SetGray(lbl); }}2.4、蓝色区域单击事件
//蓝色区域单击事件(优化后)private void lblBlue_Click(object sender, EventArgs e){ Label lbl = (Label)sender; if (lbl.Tag.ToString().Equals("0"))//tag中的值表示颜色0-灰色; {SetRedOrBlue(lbl, "blue"); } else {SetGray(lbl); }}03 清空功能3.1、效果演示
清空选择功能即将点击选择的清除,体现在界面上的变化就是将选择变色的球体恢复成灰色;
3.2、创建标签集合
①:为了方便后续功能的操作,避免每次操作都访问红球区与蓝球区的panel集合;
//创建两个标签控件集合private Dictionary<string, Label> redBallLables = new Dictionary<string, Label>();private Dictionary<string, Label> blueBallLables = new Dictionary<string, Label>();②:在初始化代码中将添加的lbl添加到对应的标签控件集合中
在InitRedPanel()中添加:
//添加到红色球集合中redBallLables.Add(lbl.Text, lbl);在InitBluePanel()中添加:
//添加到蓝色球集合中blueBallLables.Add(lbl.Text, lbl);3.3 控件属性
修改【清空】按钮的名称;
3.4 清空选择功能
①红球区域清空事件
//清空红色球选择private void btnResetRed_Click(object sender, EventArgs e){ foreach(Label item in this.redBallLables.Values) {SetGray(item); }}②蓝球区域清空事件
//清空蓝色球选择private void btnResetBlue_Click(object sender, EventArgs e){ foreach (Label item in this.blueBallLables.Values) {SetGray(item); }}04 后记以上为变色功能优化及清空功能的练习笔记,有感兴趣的可以参考尝试;
有记录不准确的欢迎评论区留言指出,更多相关技术也可以在交流群内沟通,互通有无,共同进步;