在.NET中想通过用户权限来确定菜单项是否可用,可是如何比较呢?因为菜单项没有Name属性,我原先只能通过菜单项的Text属性来比较,但是这不是好的办法,一旦菜单项的Text内容修改了,数据库表中的相应内容也要修改。最好通过像Name这样的属性来比较。菜单项没有Name属性但是有名称,如何能通过什么方法转化菜单项名称和String类型比较呢?如有
System.Windows.Forms.MenuItem mnuBase;
String tt="mnuBase";
如何确定两者相等?
或者还有其他什么好方法?
那位知道的,希不吝赐教,在此先谢了。
System.Windows.Forms.MenuItem mnuBase;
String tt="mnuBase";
如何确定两者相等?
或者还有其他什么好方法?
那位知道的,希不吝赐教,在此先谢了。
使用Enterprise Library,用配置文件可以实现Enterprise Library中文版名称是什么(我用.NET中文版,不知中英文名称对应)?这里说的配置文件是不是一个用户本地文件?如何实现,能不能说详细一点?
你可以使用窗体中控件的索引来解决,或者用菜单项的Text属性和字符串匹配用菜单项的Text属性的方法我知道也用过,但觉得不好,想找更好的方法。你说的窗体中控件的索引是否指 System.Windows.Forms.MainMenu 的实例的MenuItems[i]、MenuItems[i].MenuItems[j]……的方法?如果是这样,我也用过,但是这只是能做遍历,如何比较的问题还是一样,没有Name属性。还是你另有所指?
mnuFile.Enable = (bool)dataSet.Table[table].Rows[row]["Enable"];
把不同权限的菜单做成不同的业务组件到时调用。不理解。业务组件所指什么?好像你说的菜单是指增删改这些固定的操作,不是我这里说的菜单。
你可以手工做啊
mnuFile.Enable = (bool)dataSet.Table[table].Rows[row]["Enable"];这是一种很死的办法,如果只有几个菜单当然可以这样做。但是有很多菜单项时就不好了,也不利于代码复用。我想要的是如何在此赋值语句前,确定mnuFile是否对应dataSet.Table[table].Rows[row],而且不用mnuFile.Text比较。
public fomr1(){
...
Button button1=new Button();
this.Controls.Add(button1);
...
}
private void button1_click(...){
if(this.Controls[0]==button1)
Console.Write("OK");
else
Console.Write("no");
}
{
string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
你的方法直接比较控件是不错。但我的问题是用户权限信息存在数据库中,只能用字符串的形式保存判断。要在控件和字符串之间比较,如菜单项mnuBase和"mnuBase"如何确定一种对等关系。
也真是奇怪,这么简单的Name属性为什么别的控件类都可以取到,就偏偏MenuItem类不能取到呢?微软到底是怎么想的?
用派生类倒是个方法,我怎么没想到呢?大概我现在的编程很少用到面向对象的方法,面向对象地许多东西都生疏了。不过光是这样还不好用,应该可以做成组件的形式,我试试。
// 还可以让继承类的类名也叫 MenuItem,只不过放在 Skyiv.Windows.Forms 命名空间
// 使用时在源文件前面加上以下一行,就可以象以前一样使用 MenuItem 这个名字了,够酷吧?
// using MenuItem = Skyiv.Windows.Forms.MenuItem;namespace Skyiv.Windows.Forms
{
class MenuItem : System.Windows.Forms.MenuItem
{
object tag = null;
string name = ""; public object Tag
{
get { return tag; }
set { tag = value; }
} public string Name
{
get { return name; }
set { name = value; }
}
}
}