哈喽,你好啊,我是雷工!
红球区和篮球区的选择球可以通过拖拽控件一个一个的拖放实现,但该方法太浪费时间,可以使用循环动态生成;
只要通过观察找到每个球的位置坐标的规律,就可以通过循环生成,这样即使有再多球也不至于一个一个的拖放实现了;
以下为初始化动态生成大乐透选择球的学习笔记。
01 实现效果实现效果如下图所示,当运行程序时,可以动态生成01-35共35个红球区的选择球;

2.1、添加样式
添加球选择样式,当移动到球上时显示手型;

2.2、关键球设置
可以通过复制粘贴排列35个球的位置,然后分析每个球的位置坐标及横向间隔和每排的间隔;
03 实现思路每增加一个选择球就相当于在界面增加了一个Label控件,且每个控件的属性有些是相同的,像Font字体字号、Image、Size等属性;
有些属性是有规律变化的像Name、Text等属性数值是递增的;
可以通过初始化时在固定容器内添加需要的Label控件,并按需求设置其位置及属性。

4.1、红球初始化方法
其中尺寸信息和间隔信息可以通过UI设计的切图尺寸查看,也可以通过绘制几个样例简单复制排列位置,然后查看对应属性获取;
其中设计的是4排选择球,这里用的if判断的,其实也可以通过循环嵌套实现,不过那种更考验逻辑;这种更容易理解;
实现脚本如下:
#region 红色球区域初始化private void InitRedPanel(){ for(int i=1;i<=35;i++) {//不变的属性Label lbl = new Label();lbl.Cursor = System.Windows.Forms.Cursors.Hand;lbl.Font = new System.Drawing.Font("微软雅黑", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));lbl.Image = Image.FromFile("Image/gray.png");lbl.Size = new System.Drawing.Size(45, 45);lbl.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;//变化的属性lbl.Name = "lblRed"+i;lbl.Text = i < 10 ? "0" + i : i.ToString();lbl.Tag = "0";//将球的Tag标签设置为默认0,表示为灰色,用于点击变换颜色(实际开发中,Tag标签也可以用来存储各种数据)//单独计算坐标值if(i<=10)//第1排的坐标{ lbl.Location = new System.Drawing.Point(16+51*(i-1), 16);}else if(i>=11 && i<21){ lbl.Location = new System.Drawing.Point(16 + 51 * (i - 1-10), 68);}else if(i>=21 && i<31){ lbl.Location = new System.Drawing.Point(16 + 51 * (i - 1 - 20), 120);}else if(i>=31){ lbl.Location = new System.Drawing.Point(16 + 51 * (i - 1 - 30), 172);}// lbl.Location = new System.Drawing.Point(16, 16);//添加到面板集合中this.panelRed.Controls.Add(lbl); }}#endregion4.2、调用红球初始化方法
代码如下:
public FrmMain(){ InitializeComponent(); InitRedPanel();//调用红球初始化方法}05 后记以上为初始化动态生成大乐透红球区选择球的实现笔记;
有记录不当或有更好实现方法可以在评论区留言,更多相关话题也可以在交流群内沟通,共同学习。