问题描述
c#winform怎么动态生成4行3列的lable当lable大于12个进行翻页显示,并且lable动态增加与减少(举例:当数量为9时lable数量是9当数量为10是lable数量为10如何数量减少lable数量也随之减少静态更新)
解决方案
解决方案二:
flowLayoutPanel试试这个控件
解决方案三:
怎么实现静态刷新啊,每次刷新都是一闪一闪的
解决方案四:
还不如直接说你的需求
解决方案五:
真心没看懂你的需求
解决方案六:
以下代码在vs2013下调试通过。新建一个Windows窗体应用程序:test_dynamicLabelusingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;namespacetest_dynamicLabel{publicpartialclassForm1:Form{constintLabelRow=4;constintLabelCol=3;NumericUpDownnumericUpDown1;Label[]LabelList;publicForm1(){InitializeComponent();}privatevoidForm1_Load(objectsender,EventArgse){//页面双缓冲this.DoubleBuffered=true;AutoScroll=true;LabelList=newLabel[0];//动态设置上下调整数字的控件numericUpDown1=newNumericUpDown();numericUpDown1.Top=100;numericUpDown1.Left=100;numericUpDown1.Width=50;numericUpDown1.Parent=this;numericUpDown1.ValueChanged+=numericUpDown1_ValueChanged;//初始12个LabelnumericUpDown1.Value=12;}///<summary>///释放所有的Label///</summary>privatevoidFreeAllLabel(){intlblCount;if(LabelList==null)return;lblCount=LabelList.Count();for(inti=0;i<lblCount;i++){Labeltmplbl;tmplbl=LabelList[i];tmplbl.Text="";tmplbl.Parent=null;tmplbl=null;}LabelList=null;}///<summary>///动态生成Label///<paramname="lblCount">Label总数</param>///</summary>privatevoidDynamicCreateLabel(intlblCount){Labeltmplbl;intfrmwidth,frmheight;FreeAllLabel();//窗体的尺寸frmwidth=Width;frmheight=Height;LabelList=newLabel[lblCount];//创建Labelfor(inti=0;i<lblCount;i++){tmplbl=newLabel();tmplbl.Parent=this;//位置和Label宽度需要根据实际情况进行调整tmplbl.Left=Convert.ToInt16((frmwidth/LabelCol)*(i%LabelCol+0.5)-tmplbl.Width/2);tmplbl.Top=Convert.ToInt16((frmheight/LabelRow)*(i/LabelCol+0.5)-tmplbl.Height);tmplbl.Text="Text"+i.ToString();LabelList[i]=tmplbl;}}privatevoidnumericUpDown1_ValueChanged(objectsender,EventArgse){DynamicCreateLabel(Convert.ToInt16(numericUpDown1.Value));}}}
解决方案七:
我需要做一个排队管理,界面是一个4行3列的显示,我是读取数据库的姓名显示在上面的,当数量增加时lable自动增加,减少时自动减少,大于12时自动翻页
解决方案八:
我是这样写的,但是现在存在3个问题,第一个问题就是刷新页面是一跳一跳的,我想做成静态刷新,第二个就是翻页,当数量大于12个的时候进行翻页第三个问题就是,怎么控制行列间距usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Data.SqlClient;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;namespaceTV{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privateTimerTimer;Imageimg;privatevoidForm1_Load(objectsender,EventArgse){//定义一个计时器Timer=newTimer();Timer.Interval=1000;//每1秒刷新一次Timer.Tick+=newEventHandler(timer1_Tick);Timer.Start();this.timer1.Enabled=true;this.timer1.Interval=0x3e8;label3.Text=DateTime.Now.ToString("yyyy年MM月dd日");label4.Text=DateTime.Now.ToString("星期ddd");////定义一个计时器TimerTimer2=newTimer();Timer2.Interval=5000;//每5秒刷新一次Timer2.Tick+=newEventHandler(timer2_Tick);Timer2.Start();this.timer1.Enabled=true;this.timer1.Interval=0x3e8;}privatevoidtimer1_Tick(objectsender,EventArgse){label2.Text=DateTime.Now.ToString("HH:mm:ss");}///<summary>///ESC关闭窗体///</summary>///<paramname="msg"></param>///<paramname="keyData"></param>///<returns></returns>protectedoverrideboolProcessCmdKey(refSystem.Windows.Forms.Messagemsg,System.Windows.Forms.KeyskeyData){intWM_KEYDOWN=256;intWM_SYSKEYDOWN=260;if(msg.Msg==WM_KEYDOWN|msg.Msg==WM_SYSKEYDOWN){switch(keyData){caseKeys.Escape:if(MessageBox.Show("确定退出吗?","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Exclamation)==DialogResult.Yes){this.Close();}break;}}returnfalse;}Labellb;privatevoidtimer2_Tick(objectsender,EventArgse){this.flowLayoutPanel1.Controls.Clear();try{SqlConnectionconn=newSqlConnection("Server=.;UserId=sa;Pwd=sa;DataBase=SendDrugDB;");//实例化SqlCommand对象if(conn.State==ConnectionState.Closed){conn.Open();}SqlDataAdapterada=newSqlDataAdapter("select*fromtv_vieworderbycreate_timedesc",conn);DataSetds=newDataSet();//定义DataSet对象实例ada.Fill(ds);if(ds.Tables[0].Rows.Count>0){for(inti=0;i<ds.Tables[0].Rows.Count;i++){lb=newLabel();lb.Text=ds.Tables[0].Rows[i]["Patient_Name"].ToString();lb.Name="bt"+(i+1).ToString();//设置lb名称lb.Width=285;//设置宽度lb.Height=110;//设置高度img=Image.FromFile(@"C:UsersMQ12Desktop名字背景.png");//给lable设置背景((System.Windows.Forms.Control)lb).BackgroundImage=img;//添加背景lb.Font=newFont("宋体",50,System.Drawing.FontStyle.Bold);//设置字体大小lb.TextAlign=System.Drawing.ContentAlignment.MiddleCenter;//设置居中lb.ForeColor=Color.Transparent;//设置颜色this.flowLayoutPanel1.Controls.Add(lb);//添加至容器}}}catch{return;}}}}
解决方案九:
1、//页面双缓冲有这句还会有刷新问题吗?this.DoubleBuffered=true;
解决方案十:
为什么要每次清空所有控件再次添加控件?你就不存在就更新控件数据,不存在才添加控件
解决方案十一:
TableLayout就可以了,另外你需要局部刷新的话,可以给每个lable都动态绑定一个事件,用字典存放,key是你lable的标识,value是你更新lable的方法,当你某个lable更新的时候,只需要根据lable去字典里面查询,然后执行对应的事件就行了。楼主能明白我的意思吗?