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