当前位置:编程学习 > C#/ASP.NET >>

自定义按钮状态的设置问题

我有一个按钮,继承自button,现在希望这个按钮创建时,能自动根据数据库中某个表的某个字段的值,
设置该按钮的Enabled属性。这个处理逻辑应该是放在button的哪个事件里呢?

我尝试过将代码放在layout事件里,但发现这样做之后,打开放置按钮的FORM时,就会提示值不能为null。参数名Source的提示。代码如下:

var itemMenus = bal.commo.RoleMenus.Where(p=>p.MNUID.Trim()==MNUID);

foreach (var item in ItemMenus)
{
  this.Enabled = item.EXEABLE
}

其中,bal.commo.RoleMenus是一个集合,包含了当前登陆用户所能使用的权限集合。而我的本意就是从
这个集合里,找到该按钮对应的权限ID,然后根据EXEABLE属性来判断该按钮是否可用。

但就不知道为什么一打开FORM就报错,大虾位指点一下。如果是我放置的事件不对,还请大虾指出应该放置
在何事件里?谢谢! --------------------编程问答-------------------- 求解 --------------------编程问答--------------------
 protected override void OnPaint(PaintEventArgs pe)
        {
            base.OnPaint(pe);

            bool flag = false;//假设这是从数据库中读出来的flag
            if (flag)
            {
                //
            }
            else
            {
                this.Enabled = false;
            }
        }
--------------------编程问答-------------------- LS正解!OnPaint --------------------编程问答-------------------- 放在onPaint里没问题,但是打开放置有button控件的FORM时,还是会报“值不能为null。参数名Source”的提示,在FORM的界面上,显示的button都是没有图标的,而是显示一个红色的X号!~ --------------------编程问答-------------------- 在FORM的界面上,把button的MNUID的值去掉(要根据MNUID值来获取该按钮的可用状态,在设计时,已经填入了相关的值),改为在FORM的load事件里赋值就没事了。

Onpaint事件里的代码:


if (!string.isNullorEmpty(this.MNUID))

   var itemMenus = bal.commo.RoleMenus.Where(p=>p.MNUID.Trim()==MNUID);

foreach (var item in ItemMenus)
{
  this.Enabled = item.EXEABLE
}
}else(this.Enabled = true;)


代码如上,为什么在设计时为button填入MNUID值,打开界面时就报错,而改为在FORM的load事件里为button的MNUID赋值就没事?哪位大虾能给个解释?
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,