前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >c#winform怎样实现动态生成控件

c#winform怎样实现动态生成控件

作者头像
zls365
发布2021-03-16 16:20:04
发布2021-03-16 16:20:04
1.5K00
代码可运行
举报
文章被收录于专栏:CSharp编程大全CSharp编程大全
运行总次数:0
代码可运行

概述

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

实现方式

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

代码语言:javascript
代码运行次数:0
复制
 private void LoadRoomType()
        {
            DataTable dtRoomType = _roomTypeBLL.GetModelList("", "Code");
            pnlRoomType.Controls.Clear();
            int padding = 5;
            int x = padding, y = padding;
            pnlRoom.Controls.Clear();
            foreach (DataRow item in dtRoomType.Rows)
            {
                Label lbl = new Label();
                lbl.Text = string.Format("{0}", item["Names"]);
                lbl.Image = btnRoomType.Image;
                lbl.Cursor = Cursors.IBeam;
                lbl.TextAlign = btnRoomType.TextAlign;
                lbl.Font = btnRoomType.Font;
                lbl.ForeColor = btnRoomType.ForeColor;
                lbl.Size = btnRoomType.Size;
                lbl.Location = new Point(x, y);
                lbl.Tag = item;
                lbl.Click += new EventHandler(lbl_Click);
                lbl.MouseEnter += new EventHandler(lbl_MouseEnter);
                lbl.MouseLeave += new EventHandler(lbl_MouseLeave);
                x += lbl.Width + padding;
                if (x + lbl.Width > pnlRoomType.Width)
                {
                    x = padding;
                    y += lbl.Height + padding;
                }
                pnlRoomType.Controls.Add(lbl);
            }
            int height = y + (x != padding ? pnlRoomType.Height : 0) + padding;
            int addHeight = height - pnlRoomType.Height;
            pnlRoom.Top = pnlRoom.Top + addHeight;
            pnlRoom.Height = pnlRoom.Height - addHeight;
            pnlRoomType.Height = pnlRoomType.Height + addHeight;
            if (dtRoomType.Rows.Count > 0)
                LoadRoomByTypeID(dtRoomType.Rows[0], 0);
        }

2、定义Label 的点击事件。

代码语言:javascript
代码运行次数:0
复制
  void lbl_Click(object sender, EventArgs e)
        {
            try
            {
                Label lbl = sender as Label;
                DataRow row = lbl.Tag as DataRow;
                LoadRoomByTypeID(row, 0);
               
            }
            catch (Exception ex)
            {

               ;
            }

        }

3、定义Label 的鼠标事件。

代码语言:javascript
代码运行次数:0
复制
   #region lbl_MouseLeave
        void lbl_MouseLeave(object sender, EventArgs e)
        {
            Label lbl = sender as Label;
            lbl.Font = new Font(lbl.Font, FontStyle.Regular);
            lbl.Cursor = Cursors.Default;
            lbl.ForeColor = btnRoomType.ForeColor;
        }
        #endregion
        #region lbl_MouseEnter
        void lbl_MouseEnter(object sender, EventArgs e)
        {
            Label lbl = sender as Label;
            lbl.Font = new  Font(lbl.Font, FontStyle.Bold);
            lbl.Cursor = Cursors.IBeam;
        }
        #endregion

效果

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CSharp编程大全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 实现方式
  • 效果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档