WinForm 遍历用户控件里CheckBox
1、常用调用方法
1 public partial class UCRights : UserControl 2 { 3 private readonly int LOCATIONY; 4 private DataTable MENU = new DataTable(); 5 private BLL.User oUser = new HRPOWER.BLL.User(); 6 7 public UCRights() 8 { 9 InitializeComponent(); 10 LOCATIONY = panRightMenu_Top.Location.Y; 11 } 12 13 private void UCRights_Load(object sender, EventArgs e) 14 { 15 tebDesc.Enabled = false; 16 tebDesc.BackColor = Color.White; 17 tebPWD.PasswordChar = '*'; 18 tebPWD2.PasswordChar = '*'; 19 20 MENU.Columns.Add("MENUID"); 21 MENU.Columns.Add("USERID"); 22 MENU.Columns.Add("COMPANYID"); 23 MENU.AcceptChanges(); 24 25 BLL.User.UploadValues2CobUID(cobID); 26 27 SetTabSort(); 28 29 LoadCompanyComponent(); 30 } 31 32 /// <summary> 33 /// 加载公司组件 34 /// </summary> 35 private void LoadCompanyComponent() 36 { 37 HRPOWER.BLL.Company _ocompany = new HRPOWER.BLL.Company(); 38 DataTable _dt = _ocompany.GetCompanyInfo(); 39 40 int LOCATIONX = 218; 41 42 if (_dt.Rows.Count > 0) 43 { 44 for (int i = 0; i < _dt.Rows.Count; i++) 45 { 46 Parts.UCRightCompany _ucRC = new HRPOWER.WIN.UC.Parts.UCRightCompany(); 47 _ucRC.COMPANYNAME = _dt.Rows[i]["NAME_SHORT"].ToString(); 48 _ucRC.COMPANYID = _dt.Rows[i]["ID"].ToString(); 49 Control c = (Control)_ucRC; 50 c.Location = new Point(LOCATIONX, LOCATIONY); 51 c.Name = "UCRightCompany" + i.ToString(); 52 this.Controls.Add(c); 53 LOCATIONX += 129; 54 } 55 } 56 if (LOCATIONX > this.Width) 57 { 58 this.Width = LOCATIONX + _dt.Rows.Count; 59 } 60 } 61 62 /// <summary> 63 /// 获取用户对应的权限 64 /// </summary> 65 /// <param name="cContainer">控件容器</param> 66 private void SearchControls(System.Windows.Forms.Control cContainer) 67 { 68 foreach (System.Windows.Forms.Control c in cContainer.Controls) 69 { 70 if (c is CheckBox) 71 { 72 CheckBox _chb = (CheckBox)c; 73 if (_chb.Checked) 74 { 75 string _sCompID = String.Empty; 76 Control[] ctlList = _chb.Parent.Parent.Controls.Find("chbCompany", true); 77 78 if (ctlList.Length > 0) 79 { 80 CheckBox chb = (CheckBox)ctlList.GetValue(0); 81 _sCompID = chb.Text; 82 83 if (MENU.Select("MENUID=" + _chb.Tag.ToString()).Length > 0) 84 { 85 DataRow dr = MENU.Select("MENUID=" + _chb.Tag.ToString())[0]; 86 DataRow ddr = MENU.NewRow(); 87 ddr["USERID"] = dr["USERID"]; 88 ddr["MENUID"] = dr["MENUID"]; 89 ddr["COMPANYID"] = dr["COMPANYID"].ToString().Contains(_sCompID) ? dr["COMPANYID"].ToString() : dr["COMPANYID"].ToString() + _sCompID + ","; 90 MENU.Rows.Remove(dr); 91 MENU.Rows.Add(ddr); 92 93 } 94 else 95 { 96 DataRow ddr = MENU.NewRow(); 97 ddr["USERID"] = cobID.Text; 98 ddr["MENUID"] = _chb.Tag.ToString(); 99 ddr["COMPANYID"] = _sCompID + ","; 100 MENU.Rows.Add(ddr); 101 } 102 MENU.AcceptChanges(); 103 } 104 } 105 } 106 if (c.HasChildren) SearchControls(c); 107 } 108 } 109 110 private void butSave_Click(object sender, EventArgs e) 111 { 112 String _sResult = String.Empty; 113 if (!CheckInfoIsFull()) 114 { 115 return; 116 } 117 118 SearchControls(this); 119 120 _sResult = oUser.UpdateRoleInfoByUser(cobID.Text, tebName.Text, tebPWD.Text, MENU); 121 122 if (_sResult.ToLower() == "true") 123 { 124 BLL.BaseClass.DialogMessage("您好,用户权限设置成功!", "提示"); 125 tebName.Text = null; 126 cobID.Text = null; 127 tebPWD.Text = tebPWD2.Text = null; 128 SetCheckBoxIsUnchecked(this); 129 } 130 else 131 { 132 BLL.BaseClass.DialogMessage("抱歉,用户权限设置不成功,请确认信息无误后再设置", "提示"); 133 BLL.BaseClass.LogErrorLog(_sResult); 134 tebName.Focus(); 135 } 136 137 MENU.Clear(); 138 } 139 140 /// <summary> 141 /// 检测必选条件是否符合要求,true为是,false为否 142 /// </summary> 143 /// <returns></returns> 144 private Boolean CheckInfoIsFull() 145 { 146 Boolean _bRtn = true; 147 148 if (String.IsNullOrEmpty(tebName.Text.Trim())) 149 { 150 BLL.BaseClass.DialogMessage(String.Format("您好,{0}不能为空", labName.Text.Replace(" ", String.Empty)), "提示"); 151 tebName.Focus(); 152 _bRtn = false; 153 } 154 if (tebName.Text.Trim().Length > 50) 155 { 156 BLL.BaseClass.DialogMessage(String.Format("抱歉,{0}长度不能超过50个字符", labName.Text.Replace(" ", String.Empty)), "提示"); 157 tebName.Focus(); 158 _bRtn = false; 159 } 160 if (String.IsNullOrEmpty(cobID.Text.Trim())) 161 { 162 BLL.BaseClass.DialogMessage(String.Format("您好,{0}不能为空", labID.Text.Replace(" ", String.Empty)), "提示"); 163 cobID.Focus(); 164 _bRtn = false; 165 } 166 if (cobID.Text.Trim().Length > 50 || !BLL.BaseClass.IsNumberOrChar(cobID.Text.Trim())) 167 { 168 BLL.BaseClass.DialogMessage(String.Format("抱歉,{0}长度不能超过50个字符同时只能为数字或字母", labID.Text.Replace(" ", String.Empty)), "提示"); 169 cobID.Focus(); 170 _bRtn = false; 171 } 172 if (String.IsNullOrEmpty(tebPWD.Text)) 173 { 174 BLL.BaseClass.DialogMessage(String.Format("您好,{0}不能为空", labPWD.Text.Replace(" ", String.Empty)), "提示"); 175 tebPWD.Focus(); 176 _bRtn = false; 177 } 178 if (String.IsNullOrEmpty(tebPWD2.Text)) 179 { 180 BLL.BaseClass.DialogMessage(String.Format("您好,{0}不能为空", labPWD2.Text.Replace(" ", String.Empty)), "提示"); 181 tebPWD2.Focus(); 182 _bRtn = false; 183 } 184 if (tebPWD.Text.Length>50 || tebPWD2.Text.Length>50) 185 { 186 BLL.BaseClass.DialogMessage("抱歉,密码长度不能超过50", "提示"); 187 tebPWD.Focus(); 188 _bRtn = false; 189 } 190 if (String.Compare(tebPWD.Text, tebPWD2.Text, false) != 0 || !BLL.BaseClass.IsNumberOrChar(tebPWD.Text.Trim())) 191 { 192 BLL.BaseClass.DialogMessage(String.Format("抱歉,{0}与{1}不相同或者密码不为数字、字母组成", 193 labPWD.Text.Replace(" ", String.Empty), 194 labPWD2.Text.Replace(" ", String.Empty)), "提示"); 195 tebPWD.Focus(); 196 _bRtn = false; 197 } 198 199 return _bRtn; 200 } 201 202 /// <summary> 203 /// 设置WINDOWS TAB键顺序 204 /// </summary> 205 private void SetTabSort() 206 { 207 cobID.TabIndex = 0; 208 tebName.TabIndex = 1; 209 tebPWD.TabIndex = 2; 210 tebPWD2.TabIndex = 3; 211 butSave.TabIndex = 4; 212 cobID.Focus(); 213 } 214 215 private void cobID_SelectedIndexChanged(object sender, EventArgs e) 216 { 217 SetCheckBoxIsUnchecked(this); 218 DataTable _dtMenu = oUser.GetUserMenuInfoByUID(cobID.Text); 219 if (_dtMenu.Rows.Count > 0) 220 { 221 tebName.Text = _dtMenu.Rows[0]["Comment"].ToString(); 222 tebPWD2.Text = tebPWD.Text = BLL.BaseClass.Decrypt(_dtMenu.Rows[0]["Password"].ToString()); 223 foreach (DataRow dr in _dtMenu.Rows) 224 { 225 SetValueToCheckBox(this, dr); 226 } 227 } 228 else 229 { 230 tebName.Text = tebPWD.Text = tebPWD2.Text = null; 231 } 232 } 233 234 /// <summary> 235 /// 根据查询结果,给用户设置对应的值 236 /// </summary> 237 /// <param name="cContainer">控件容器</param> 238 /// <param name="dr">DataRow</param> 239 private void SetValueToCheckBox(Control cContainer, DataRow dr) 240 { 241 foreach (Control c in cContainer.Controls) 242 { 243 if (c is CheckBox) 244 { 245 CheckBox chb = (CheckBox)c; 246 string tmp = dr["MENU_ID"].ToString(); 247 string tmp1 = chb.Tag.ToString(); 248 if (tmp1 == tmp && !chb.Checked) 249 { 250 //查找公司CheckBox控件 251 Control[] cList = chb.Parent.Parent.Controls.Find("chbCompany", true); 252 if (cList.Length > 0) 253 { 254 if (dr["COMPANY_ID"].ToString().Contains(((CheckBox)cList.GetValue(0)).Text)) 255 { 256 chb.Checked = true; 257 } 258 } 259 } 260 } 261 262 if (c.HasChildren) 263 { 264 SetValueToCheckBox(c, dr); 265 } 266 } 267 } 268 269 /// <summary> 270 /// 设置CheckBox控件为未选状态 271 /// </summary> 272 /// <param name="cContainer">控件容器</param> 273 private void SetCheckBoxIsUnchecked(Control cContainer) 274 { 275 foreach (Control c in cContainer.Controls) 276 { 277 if (c is CheckBox) 278 { 279 ((CheckBox)c).Checked = false; 280 } 281 282 //处理隐藏的Panel不被处理 283 if (c.HasChildren && c.Name!="panCompany0Hide") 284 SetCheckBoxIsUnchecked(c); 285 } 286 } 287 288 private void cobID_KeyPress(object sender, KeyPressEventArgs e) 289 { 290 if (e.KeyChar == (char)13) 291 { 292 cobID_SelectedIndexChanged(null, null); 293 } 294 } 295 296 }
2、获取指定窗体内,所以check值集合
1 /// <summary> 2 /// 加载公司组件 3 /// </summary> 4 private void LoadCompanyComponent() 5 { 6 HRPOWER.BLL.Company _ocompany = new HRPOWER.BLL.Company(); 7 DataTable _dt = _ocompany.GetCompanyInfo(); 8 9 int LOCATIONX = 218; 10 11 if (_dt.Rows.Count > 0) 12 { 13 for (int i = 0; i < _dt.Rows.Count; i++) 14 { 15 Parts.UCRightCompany _ucRC = new HRPOWER.WIN.UC.Parts.UCRightCompany(); 16 _ucRC.COMPANYNAME = _dt.Rows[i]["NAME_SHORT"].ToString(); 17 _ucRC.COMPANYID = _dt.Rows[i]["ID"].ToString(); 18 Control c = (Control)_ucRC; 19 c.Location = new Point(LOCATIONX, LOCATIONY); 20 c.Name = "UCRightCompany" + i.ToString(); 21 this.Controls.Add(c); 22 LOCATIONX += 129; 23 } 24 } 25 if (LOCATIONX > this.Width) 26 { 27 this.Width = LOCATIONX + _dt.Rows.Count; 28 } 29 } 30 31 /// <summary> 32 /// 获取用户对应的权限 33 /// </summary> 34 /// <param name="cContainer">控件容器</param> 35 private void SearchControls(System.Windows.Forms.Control cContainer) 36 { 37 foreach (System.Windows.Forms.Control c in cContainer.Controls) 38 { 39 if (c is CheckBox) 40 { 41 CheckBox _chb = (CheckBox)c; 42 if (_chb.Checked) 43 { 44 string _sCompID = String.Empty; 45 Control[] ctlList = _chb.Parent.Parent.Controls.Find("chbCompany", true); 46 47 if (ctlList.Length > 0) 48 { 49 CheckBox chb = (CheckBox)ctlList.GetValue(0); 50 _sCompID = chb.Text; 51 52 if (MENU.Select("MENUID=" + _chb.Tag.ToString()).Length > 0) 53 { 54 DataRow dr = MENU.Select("MENUID=" + _chb.Tag.ToString())[0]; 55 DataRow ddr = MENU.NewRow(); 56 ddr["USERID"] = dr["USERID"]; 57 ddr["MENUID"] = dr["MENUID"]; 58 ddr["COMPANYID"] = dr["COMPANYID"].ToString().Contains(_sCompID) ? dr["COMPANYID"].ToString() : dr["COMPANYID"].ToString() + _sCompID + ","; 59 MENU.Rows.Remove(dr); 60 MENU.Rows.Add(ddr); 61 62 } 63 else 64 { 65 DataRow ddr = MENU.NewRow(); 66 ddr["USERID"] = cobID.Text; 67 ddr["MENUID"] = _chb.Tag.ToString(); 68 ddr["COMPANYID"] = _sCompID + ","; 69 MENU.Rows.Add(ddr); 70 } 71 MENU.AcceptChanges(); 72 } 73 } 74 } 75 if (c.HasChildren) SearchControls(c); 76 } 77 }
所有问题都会有一定程度的抽象和假设