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;
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM