WinForm 遍历用户控件里CheckBox

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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     }
View Code

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                       

以上是关于WinForm 遍历用户控件里CheckBox的主要内容,如果未能解决你的问题,请参考以下文章

c# winfrom。有4个 checkBox控件,如何判断只要选中,就把选中的checkbox的内容放一起显示出来?

在C#winform中如何遍历子窗体中所有的控件

winform一个窗口调用另外一个窗口的控件

C# winform ListView+CheckBox的做法

WinForm控件TreeView 只部分节点显示 CheckBox

wpf中调用winform用户控件的方法