上位机软件开发需求中,要考虑客户生产体验。不能说是点击开启,过一会就弹出一个完成结果的显示,这样有些自以为头脑发达的客户会说你这样不行,要怎么怎么样……。
好的,需求来了。在生产过程中,产品到达某个位置、结束了什么动作,要在软件界面上显示出来。来个简单一点的,方阵形产品摆放,一个盘子上放着5行5列的产品,需要逐一对产品上的码进行数据采集,在采集过程中如何在软件上显示这个过程,我用黄色方块来表示产品,采集一个方块颜色变绿色,采集失败的变红色。
c#绘制方块,用两种方式
1.根据x(行)y(列)参数,生成几行几列的方阵,对应产品方阵。
如:x=8,y=14
public static void DrawRectangleXY(Panel page, int x, int y)
{
int Page_Width = page.Width;
int Page_Height = page.Height;
int Single_Width = Page_Width / (2 * x + 1);
int Single_Height = Page_Height / (2 * 4 + 1);
Size size = new Size(Convert.ToInt32(30), Convert.ToInt32(30));//方块的长宽设定
int a = 0;
for (int i = 0; i < x; i++)
{
if (i % y == 0 && i != 0)
{
a++;
}
int Xnum = (i + 1) % x;
int Ynum = i / x + 1;
if (Xnum == 0)
{
Xnum = x;
}
Label lable = new Label();
lable.Location = new Point(20 + i % y * 70, 20 + a * 70);//方块的位置
//20 + i % y * 70, 20 + a * 70 符合大方块的位置设定
//14 + i % y * 18, 14 + a * 18 符合小方块的位置设定
lable.Size = size;
lable.Tag = lable.Size.Width.ToString() + ',' + lable.Size.Height.ToString();
lable.BackColor = Color.Yellow;
lable.Name = "lable" + i.ToString();
lable.Visible = true;
page.Controls.Add(lable);
}
}
2.根据方块z(总数),和一行几列(y)参数,逐一生成方块
如:z=150,y=25
public static void DrawRectangleZY(Panel pan, int x, int y)
{
int Page_Width = pan.Width;
int Page_Height = pan.Height;
int Single_Width = Page_Width / (2 * x + 1);
int Single_Height = Page_Height / (2 * y + 1);
Size size = new Size(Single_Width, Single_Height);
for (int i = 0; i < x * y; i++)
{
int xNum = (i + 1) % x; // 第几列
int yNum = i / x + 1; //第几行
if (xNum == 0)
{
xNum = x;
}
Point point = new Point(((xNum * 2) - 1) * Single_Width, ((yNum * 2) - 1) * Single_Height);
Label lable = new Label();
lable.Location = point;
lable.Size = size;
lable.Tag = lable.Size.Width.ToString() + ',' + lable.Size.Height.ToString();
lable.BackColor = Color.Yellow;
lable.Name = "lable" + i.ToString();
lable.Visible = true;
pan.Controls.Add(lable);
}
}