zoukankan      html  css  js  c++  java
  • winform窗体传值和动态添加控件

    1.跳转窗体时传值

     1 //将要显示的页面实例化
     2 RoleMenuForm rmf = new RoleMenuForm();
     3 try
     4 {
     5 //在此给RoleMenuForm 窗体中的变量roleId传值
     6 rmf.roleId = int.Parse(dataGridView1.SelectedRows[0].Cells[0].Value.ToString());
     7 rmf.Show();//显示窗体
     8 }catch
     9 {
    10 MessageBox.Show("没有选择角色");
    11 return;
    12 }

    注意:要在跳转的窗体创建一个public 的变量

    1         //定义的变量,前一页面已赋值,该窗体中可以直接使用
    2         public int roleId;
    3         private void RoleMenuForm_Load(object sender, EventArgs e)
    4         {
    5          //窗体加载事件的代码
    6          }

    2.自动在窗体中生成控件(我是在窗体加载事件中查询数据库,根据数据库的数据自动生成label标签并绑定了需要绑定的数据)

     1 private void RoleMenuForm_Load(object sender, EventArgs e)
     2         {
     3             RoleHandle rh = new RoleHandle();
     4             DataTable dr = rh.Role_Id_Name();
     5 
     6             #region 动态显示角色
     7             int wx = 10;
     8             int hy = 10;
     9             //根据数据库的数据动态添加
    10             for (int i = 0; i < dr.Rows.Count; i++)
    11             {
    12                 Label lb = new Label();//实例化label控件的对象
    13                 lb.Text = dr.Rows[i]["Role_Name"].ToString();
    14                 lb.Tag = dr.Rows[i]["Role_ID"];
    15                 lb.Parent = panel1;//设置生成的label控件的父容器
    16                 lb.BackColor = System.Drawing.SystemColors.HighlightText;//设置label控件的背景色为白色
    17                 lb.Size = new Size(80, 20);//设置label控件的大小
    18                 lb.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;//设置label控件Text值对齐方式为居中左对齐
    19                 lb.Location = new Point(wx, hy);//设置label控件的位置
    20                 hy += 30;
    21 
    22                 //为label设置单击事件
    23                 lb.Click += new EventHandler(Lb_Click);
    24             }
    25             //遍历panel1中的所有控件
    26             foreach (Control cl in panel1.Controls)
    27             {
    28                 if (cl is Label)//如果该控件是label,再在下面判断是不是我们需要选中的,如果是就改变其背景色为蓝色
    29                 {
    30                     Label lb = cl as Label;
    31                     if (int.Parse(lb.Tag.ToString()) == roleId)
    32                     {
    33                         //改变背景色为蓝色
    34                         cl.BackColor = System.Drawing.SystemColors.GradientActiveCaption;
    35                     }
    36                 }
    37             }
    38             #endregion
    39        }       

    label控件自动生成了,但是如何设置自动生成的控件的单击事件呢?

    3.如上面代码中标出的代码,在生成控件时添上那一句设置单击事件的代码就可以了,单击事件的代码如下:

     1 //label标签的单击事件
     2 private void Lb_Click(object sender, EventArgs e)
     3         {
     4             Label lb = (Label)sender;
     5             //将所有标签背景色都改为未选中时的颜色
     6             foreach (Control cl in panel1.Controls)
     7             {
     8                 if (cl is Label)
     9                 {
    10                     Label lb1 = cl as Label;
    11                     lb1.BackColor = System.Drawing.SystemColors.HighlightText;
    12                 }
    13             }
    14             //将单击的label的背景色改为选中的颜色
    15             lb.BackColor = System.Drawing.SystemColors.GradientActiveCaption;
    16             RoleChanged();
    17         }

    单击事件有了,那么如果我想获得我选中的label中的值怎么办呢?

    4.我是根据label的背景色来获取的,我在自动生成时都设置了label标签的背景色,当我单击选中了某个label时,我在单击事件中修改了label标签的背景色,获取的代码如下:

    //自定义的得到选择标签的对象,并获取我们需要的值
    private int GetSelectedRoleId()
            {
                int roleId = 0;
                //循环panel中所有的控件
                foreach (Control cl in panel1.Controls)
                {
                    if (cl is Label)//判断该控件是不是label
                    {
                        Label lb = cl as Label;
                         //根据label标签的背景色来判断该label标签是不是我们选择的label标签
                        if (lb.BackColor == System.Drawing.SystemColors.GradientActiveCaption)
                        {
                            //如果是,则取出我们想要的值
                            roleId = int.Parse(lb.Tag.ToString());
                        }
                    }
                }
                return roleId;
            }
  • 相关阅读:
    遇到的一道发散思维题C#
    SQLSERVER函数判断当天是星期几
    C# Web 获取客户端IP
    C# 月度进度条实现
    FileZilla Server的安装和设置
    SQL1428N 应用程序已与 "DB2" 连接,
    DB2客户端连接服务器
    IIS提示Execute Access Denied解决办法
    dom4j java.lang.NoClassDefFoundError: org/jaxen/JaxenException
    Oracle查看用户、用户权限、用户表空间、用户默认表空间
  • 原文地址:https://www.cnblogs.com/Li232/p/10576534.html
Copyright © 2011-2022 走看看