在做用戶權限設置功能時,需要做一個動態生成權限列表的功能。(筆記、分享)
//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;//列號
用來換行的。
)。