Winform窗体控件级权限处理
公共类:
static class PowerHelper
{
/// <summary>
/// 设置form上的组件的权限
/// </summary>
/// <param name="form">控件所在的窗体</param>
/// <param name="getPermissionsHandler">取得form里组件名及其Enabled属性(当前用户)的键值对</param>
public static void SetPermissions(this Form form, Func<Form, IDictionary<string, bool>> getPermissionsHandler)
{
Type t = form.GetType();
FieldInfo[] fs = t.GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static);
IDictionary<string, bool> permissions = getPermissionsHandler(form);
foreach (FieldInfo f in fs)
{
dynamic component = f.GetValue(form);
if (component is System.ComponentModel.Component && permissions.ContainsKey(f.Name))
{
try
{
//禁用
component.Enabled = permissions[f.Name];
//隐藏
//component.Visible = permissions[f.Name];
}
catch { }
}
}
}
基类窗体加入验证:
public partial class BaseForm : Form
{
public BaseForm()
{
InitializeComponent();
}
private void BaseForm_Load(object sender, EventArgs e)
{
Func<Form, IDictionary<string, bool>> powerFunc = ValidatePower;
PowerHelper.SetPermissions(this, powerFunc);
}
private Dictionary<string, bool> ValidatePower(Form frm)
{
Dictionary<string, bool> powerList = new Dictionary<string, bool>();
powerList.Add("toolStripButton1", false);
powerList.Add("button3", false);
powerList.Add("textBox2", false);
return powerList;
}
}
程序窗体继承基类:
public partial class Form1 : BaseForm
{
public Form1()
{
InitializeComponent();
}
}
Winform窗体控件级权限处理的更多相关文章
- winform窗体控件(全)
回顾跟补充下除了昨天那常用6个其他的winform窗体控件作用 1:Button:按钮 (1)AutoSize:如果是True的情况下,内容将会撑开:False的话会另起一行 (2)Enabled: ...
- C# WinForm窗体控件Panel修改边框颜色以及边框宽度方法
C# WinForm窗体控件Panel修改边框颜色以及边框宽度方法 1.新建组件这里可以自定义一个Panel控件起名为PanelEx 2.增加一个BoderColor属性和BoderSize属性 pr ...
- C# WinForm窗体控件GroupBox修改边框颜色控件
C# WinForm窗体控件GroupBox修改边框颜色控件 1.新建组件这里可以自定义一个GroupBox控件起名为GroupBoxEx 2.增加一个BoderColor属性 private Col ...
- 如何在多线程中调用winform窗体控件
由于 Windows 窗体控件本质上不是线程安全的.因此如果有两个或多个线程适度操作某一控件的状态(set value),则可能会迫使该控件进入一种不一致的状态.还可能出现其他与线程相关的 bug,包 ...
- winform窗体 控件【菜单和工具栏控件】【容器控件】
winform的菜单栏和工具栏 1.ContextMenuStrip -- 右键菜单 可以绑定在任何一个控件上,添加操作快捷键,并可以设置多层 每行相当于一个按钮,输入-可添加 ...
- Winform窗体控件自适应大小
自己写的winform窗体自适应大小代码,代码比较独立,很适合贴来贴去不会对原有程序造成影响,可以直接继承此类或者把代码复制到自己的代码里面直接使用 借鉴了网上的一些资料,最后采用重写WndProc方 ...
- Winform 窗体控件随窗体自动(等比例)调整大小
新建窗体程序了,添加窗体事件Load(加载窗体时).Resize(调整控件大小时).自定义方法setTag(获取控件的width.height.left.top.字体大小等信息的值).setContr ...
- winform窗体 控件【MDI 窗体容器】
MDI :窗体容器 -- 在窗体中放置窗体 属性 IsMdiContainer : 是否是窗体 -- 只有 Form 有此属性 Form2 f2 = new Form2(); ...
- winform窗体 控件【公共控件】
Button 按钮 布局 AutoSize 自动匹配尺寸 Location 确定控件位置,相对左上角坐标 Margin 控件与控件之间的距离 Size ...
随机推荐
- spring-boot+quartz的CRUD动态任务管理系统
版权声明:作者: 小柒 出处: https://blog.52itstyle.com 分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大 ...
- getitem, setitem, delitem (把类实例化成字典的类型)
class Foo(object): def __init__(self): self.data = {} def __getitem__(self, key): ...
- as3 区别中文 英文 数字
1)英文a-z是65-90,A-Z是97-112 2)数字是0-9是,48-57 3)上万的都是中文字符 var str:String = "hello world! 你好世界! 88!&q ...
- ABAP-增强-层级BOM-AB件业务
目前新需求:整车A下挂有委外总成件B,总成件B和子件E是层级BOM,且采购类型均为F,信息记录类型均为寄售,按照现在标准MRP逻辑,只能计算第一层级子件需求,无法运行出子件E的需求. 1.实现方式 1 ...
- 发送电子邮件模块smtplib
功能:smtplib模块是通过邮件服务器发送电子邮件,是smtp客户端的实现,支持邮件格式有:文本.HTML.Image.EXCEL等. 1 #!/usr/bin/env python 2 # cod ...
- Andriod Studio adb 安装应用
原文链接:https://blog.csdn.net/u014608640/article/details/51833304 下面的命令安装.重新安装和卸载应用程序. 安装:adb -s HT9BYL ...
- tomcat manager
在点击tomcat manager的时候提示以下内容: You are not authorized to view this page. By default the Host Manager is ...
- linux下挂载磁盘操作
重启服务器,查看是否挂载上去了 CentOS云服务器数据盘分区和格式化 腾迅云: http://wiki.qcloud.com/wiki/CentOS%E4%BA%91%E6%9C%8D%E5%8 ...
- Jmeter响应数据为乱码的处理
jmeter新手,跟着教程,发现响应的数据为乱码,百度到两种方法: 方法一:在相应节点的下方,添加后置处理器-BeanShell PostProcessor 添加一句代码:prev.setDataEn ...
- SVN常见问题I
TortoiseSVN ->Settings 把权限给清空,不让用户A的权限再保留在里面 右键->SVN Checkout 之后需要在A账户和B账户之间来回切换