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

开发 后端
窗体设计中,需要什么控件就从工具箱里拖出一个控件“挂”在窗体上。其实,窗体上的控件,不但可以“拖”,还可以用代码动态生成。动态生成控件,对需要相同的大量的控件还是比较有用的。

[[387388]]

 

本文转载自微信公众号「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 

效果

 

责任编辑:武晓燕 来源: UP技术控
相关推荐

2024-03-05 10:39:42

2009-09-01 10:35:59

C# WinForm控

2009-09-11 10:41:20

C# WinForm控

2009-09-11 12:52:09

C# WinForm控编辑器

2009-10-10 14:54:44

treeView1控件

2009-09-11 12:07:12

C# WinForm控

2009-09-11 11:33:58

C# WinForm控Attribute

2009-09-11 12:31:15

C# WinForm控设置默认值

2009-08-17 15:48:47

C# WinForm进

2009-09-11 11:04:23

C# WinForm自

2009-09-02 18:41:18

C#定义动态控件数组

2009-09-07 03:58:42

WinForm传值

2010-01-25 11:05:14

C++Test

2012-05-14 10:14:42

WinForm

2009-12-28 10:40:13

WPF调用Winfor

2012-09-19 10:14:12

Visual Stud

2009-08-07 13:03:10

C#控件数组

2024-03-06 08:52:59

C#Emit代码

2009-08-20 10:24:52

C#开发WinForm

2009-08-28 16:14:26

C#实现加载动态库
点赞
收藏

51CTO技术栈公众号