C#winform在一个panel中固定3列4行的label控件,在数据库中拿到数据。如果数据大于12将做翻页,请问如何做呢?
private void timer4_Tick(object sender, EventArgs e)
{
t++;
this.sql = "select * from sales_tacken where place='" + place + "'";
DataTable dt = DB.selectDT(DB.cn, this.sql);
int count = dt.Rows.Count;
if (count != 0)
{
int s = count % 12;
if (s == 0)
{
int pag = count / 12;
int clum = t % pag;
int tmp = 0; //定义tmp这个要在for轮回外面定义
if (dt != null)
{
panel3.Controls.Clear();
if (clum < pag) { pag = 12; } else { pag = s; }
int k = -1;
for (int i = clum * 12; i < clum * 12 + pag; i++)
{
k++;
int n = k % 3;
if (n == 0 && k != 0)
{
tmp++;//这个前提语句的意思是:若是控件的数量正好是5的倍数的话那么tmp+1 这个是用于把握y轴的
}
label4.Text = "第" + (clum + 1) + "頁";
int l_w = panel3.Width / 3 - 10;//设置行显示几个
int l_h = panel3.Height / 4 - 15;//设置显示几列
int x = n * (l_w + 10);
int y = (l_h + 18) * tmp; //这里定义的x和y便于把握控件在界面上的地位
Label lab = new Label();
lab.Location = new System.Drawing.Point(x, y);
lab.Name = dt.Rows[i]["barcode"].ToString();
// this.nameid = lab.Name.ToString();
lab.Font = new Font(F_Style, Convert.ToInt32(lab_no,16), FontStyle.Bold);
lab.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;//居中显示
lab.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;//显示样式
lab.Size = new System.Drawing.Size(l_w+5, l_h);
lab.Text = dt.Rows[i]["cinvno"].ToString();
panel3.Controls.Add(lab);
}
}
}
else
{
int pag = count / 12 + 1;
int clum = t % pag;
int tmp = 0; //定义tmp这个要在for轮回外面定义
if (dt != null)
{
panel3.Controls.Clear();
if (clum < pag - 1) { pag = 12; } else { pag = s; }
int k = -1;
for (int i = clum * 12; i < clum * 12 + pag; i++)
{
k++;
int n = k % 3;
if (n == 0 && k != 0)
{
tmp++;//这个前提语句的意思是:若是控件的数量正好是5的倍数的话那么tmp+1 这个是用于把握y轴的
}
label4.Text = "第" + (clum + 1) + "頁";
int l_w = panel3.Width / 3 - 10;//设置行显示几个
int l_h = panel3.Height / 4 - 15;//设置显示几列
int x = n * (l_w + 10);
int y = (l_h + 18) * tmp; //这里定义的x和y便于把握控件在界面上的地位
Label lab = new Label();
lab.Location = new System.Drawing.Point(x, y);
lab.Name = dt.Rows[i]["barcode"].ToString();
// this.nameid = lab.Name.ToString();
lab.Font = new Font(F_Style, Convert.ToInt32(lab_no,16) ,FontStyle.Bold);
lab.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;//居中显示
lab.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;//显示样式
lab.Size = new System.Drawing.Size(l_w+5, l_h);
lab.Text = dt.Rows[i]["cinvno"].ToString();
panel3.Controls.Add(lab);
}
}
}
}
else
{
panel3.Controls.Clear();
}
dt.Dispose();
dt.Clear();
// timer4.Stop();
// timer4.Dispose();
}
以上是本人写的一个控制翻页的timer事件。判断了是否刚是12的倍数还是有余数的计算翻页。问题就是每次翻页都要将PANEL中的控件都清理了,在重新生成的12个控件。这样就会使屏幕闪烁。现在客户突然不喜欢闪烁,最好是不需要闪烁就能每12个LANEL 3列4行的进行翻页。。。请问各位大侠们有什么更好的办法呢?我想了很久都没想到好的方法。。我这里说清楚就是一个panel中就放12个了label控件3列4行。。有人说不清panel控件就清label的内容。让固定的12个控件来循环,但是我做不出来。麻烦大虾们帮帮忙。小弟不胜感激。有更好的方法望贴代码分享下。谢谢了
[解决办法]
大概看了一下你的代码,估计你说的不会写问题应该是找控件上
Label lab = new Label();
if(t != 0)
{
lab = this.Controls["lbl" + i.ToString()] as Label;
}
lab.Name = "lbl" + i.ToString();