动态生成CheckBox(Winform程序)
在做用户权限设置功能时,需要做一个动态生成权限列表的功能。(笔记、分享)
//1、清空权限控件组的默认控件 panelPermissions.Controls.Clear(); _groupBoxList = new List<GroupBox>(); //2、遍历权限组数据,动态生成权限控件组 var groupBoxNameTemp = "gBox"; var checkBoxNameTemp = "ck"; var lastGroupBoxHeight = 0; for (var i = 0; i < permissions.Count; i++) { //创建权限组容器 GroupBox gbox = new GroupBox() { Name = groupBoxNameTemp + i, Text = permissions[i].GroupName, Width = 520, Height = (permissions[i].Permissions.Count / 5 + 1) * 42, Location = new Point(12, lastGroupBoxHeight + i * 10) }; lastGroupBoxHeight = lastGroupBoxHeight + gbox.Height; //将权限组容器添加到界面上 panelPermissions.Controls.Add(gbox); //创建权限组容器中的CheckBox var pRowIndex = 0; var pColIndex = 0; for (var c = 0; c < permissions[i].Permissions.Count; c++) { CheckBox checkBox = new CheckBox() { Name = checkBoxNameTemp + c, Text = permissions[i].Permissions[c].PermissionName, Tag = permissions[i].Permissions[c].Id }; pRowIndex = c / 4;//行号 pColIndex = c % 4;//列号 checkBox.Location = new Point(8 + pColIndex * 135, 16 + pRowIndex * 32); checkBox.Enabled = _currentUserHasPermissions.Contains(permissions[i].Permissions[c].Id); gbox.Controls.Add(checkBox); } _groupBoxList.Add(gbox); }
代码场景解释: 1、权限是有分组的,每一组权限放在一个GroupBox里面。2、每一组权限每行显示3个权限项(
pRowIndex = c / 4;//行号
pColIndex = c % 4;//列号
用来换行的。
)。