当前位置:主页 > 查看内容

C#Winform怎样实现动态生成控件

发布时间:2021-04-27 00:00| 位朋友查看

简介:本文转载自微信公众号「UP技术控」,作者conan5566 。转载本文请联系UP技术控公众号。 概述 动态创建添加控件,可以在一个大容器里一次性放入多个控件。例:根据文本框中输入的数字 给flowLayoutPanel1 添加多少个button。窗体设计中,需要什么控件就从工具……

本文转载自微信公众号「UP技术控」,作者conan5566 。转载本文请联系UP技术控公众号

概述

动态创建添加控件,可以在一个大容器里一次性放入多个控件。例:根据文本框中输入的数字 给flowLayoutPanel1 添加多少个button。窗体设计中,需要什么控件就从工具箱里拖出一个控件“挂”在窗体上。其实,窗体上的控件,不但可以“拖”,还可以用代码动态生成。动态生成控件,对需要相同的大量的控件还是比较有用的。

实现方式

1、加载数据,往panel添加Label 控件。

  1. private void LoadRoomType() 
  2.         { 
  3.             DataTable dtRoomType = _roomTypeBLL.GetModelList("""Code"); 
  4.             pnlRoomType.Controls.Clear(); 
  5.             int padding = 5; 
  6.             int x = padding, y = padding; 
  7.             pnlRoom.Controls.Clear(); 
  8.             foreach (DataRow item in dtRoomType.Rows
  9.             { 
  10.                 Label lbl = new Label(); 
  11.                 lbl.Text = string.Format("{0}", item["Names"]); 
  12.                 lbl.Image = btnRoomType.Image; 
  13.                 lbl.Cursor = Cursors.IBeam; 
  14.                 lbl.TextAlign = btnRoomType.TextAlign; 
  15.                 lbl.Font = btnRoomType.Font; 
  16.                 lbl.ForeColor = btnRoomType.ForeColor; 
  17.                 lbl.Size = btnRoomType.Size
  18.                 lbl.Location = new Point(x, y); 
  19.                 lbl.Tag = item; 
  20.                 lbl.Click += new EventHandler(lbl_Click); 
  21.                 lbl.MouseEnter += new EventHandler(lbl_MouseEnter); 
  22.                 lbl.MouseLeave += new EventHandler(lbl_MouseLeave); 
  23.                 x += lbl.Width + padding; 
  24.                 if (x + lbl.Width > pnlRoomType.Width) 
  25.                 { 
  26.                     x = padding; 
  27.                     y += lbl.Height + padding; 
  28.                 } 
  29.                 pnlRoomType.Controls.Add(lbl); 
  30.             } 
  31.             int height = y + (x != padding ? pnlRoomType.Height : 0) + padding; 
  32.             int addHeight = height - pnlRoomType.Height; 
  33.             pnlRoom.Top = pnlRoom.Top + addHeight; 
  34.             pnlRoom.Height = pnlRoom.Height - addHeight; 
  35.             pnlRoomType.Height = pnlRoomType.Height + addHeight; 
  36.             if (dtRoomType.Rows.Count > 0) 
  37.                 LoadRoomByTypeID(dtRoomType.Rows[0], 0); 
  38.         } 

2、定义Label 的点击事件。

  1. void lbl_Click(object sender, EventArgs e) 
  2.         { 
  3.             try 
  4.             { 
  5.                 Label lbl = sender as Label; 
  6.                 DataRow row = lbl.Tag as DataRow; 
  7.                 LoadRoomByTypeID(row, 0); 
  8.                 
  9.             } 
  10.             catch (Exception ex) 
  11.             { 
  12.  
  13.                ; 
  14.             } 
  15.  
  16.         } 

3、定义Label 的鼠标事件。

  1. #region lbl_MouseLeave 
  2.         void lbl_MouseLeave(object sender, EventArgs e) 
  3.         { 
  4.             Label lbl = sender as Label; 
  5.             lbl.Font = new Font(lbl.Font, FontStyle.Regular); 
  6.             lbl.Cursor = Cursors.Default
  7.             lbl.ForeColor = btnRoomType.ForeColor; 
  8.         } 
  9.         #endregion 
  10.         #region lbl_MouseEnter 
  11.         void lbl_MouseEnter(object sender, EventArgs e) 
  12.         { 
  13.             Label lbl = sender as Label; 
  14.             lbl.Font = new  Font(lbl.Font, FontStyle.Bold); 
  15.             lbl.Cursor = Cursors.IBeam; 
  16.         } 
  17.         #endregion 

效果


本文转载自网络,原文链接:https://mp.weixin.qq.com/s/xWhZ870d1VefslBn1-DBhg
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文

  • 周排行
  • 月排行
  • 总排行

随机推荐