在.NET中想通过用户权限来确定菜单项是否可用,可是如何比较呢?因为菜单项没有Name属性,我原先只能通过菜单项的Text属性来比较,但是这不是好的办法,一旦菜单项的Text内容修改了,数据库表中的相应内容也要修改。最好通过像Name这样的属性来比较。菜单项没有Name属性但是有名称,如何能通过什么方法转化菜单项名称和String类型比较呢?如有
System.Windows.Forms.MenuItem mnuBase;
String tt="mnuBase";
如何确定两者相等?
或者还有其他什么好方法?
那位知道的,希不吝赐教,在此先谢了。

解决方案 »

  1.   

    使用Enterprise Library,用配置文件可以实现
      

  2.   

    你可以使用窗体中空间的索引来解决,或者用菜单项的Text属性和字符串匹配。
      

  3.   

    你可以使用窗体中控件的索引来解决,或者用菜单项的Text属性和字符串匹配
      

  4.   

    回claus2001(古风) 
    使用Enterprise Library,用配置文件可以实现Enterprise Library中文版名称是什么(我用.NET中文版,不知中英文名称对应)?这里说的配置文件是不是一个用户本地文件?如何实现,能不能说详细一点?
      

  5.   

    回YYKXQ(异域狂想曲)
    你可以使用窗体中控件的索引来解决,或者用菜单项的Text属性和字符串匹配用菜单项的Text属性的方法我知道也用过,但觉得不好,想找更好的方法。你说的窗体中控件的索引是否指 System.Windows.Forms.MainMenu 的实例的MenuItems[i]、MenuItems[i].MenuItems[j]……的方法?如果是这样,我也用过,但是这只是能做遍历,如何比较的问题还是一样,没有Name属性。还是你另有所指?
      

  6.   

    每个菜单项都是 MenuItem 的实例
      

  7.   

    你可以手工做啊
    mnuFile.Enable = (bool)dataSet.Table[table].Rows[row]["Enable"];
      

  8.   

    回zeusvenus(清柳)
    把不同权限的菜单做成不同的业务组件到时调用。不理解。业务组件所指什么?好像你说的菜单是指增删改这些固定的操作,不是我这里说的菜单。
      

  9.   

    回oldhunter(老猎人) 
    你可以手工做啊
    mnuFile.Enable = (bool)dataSet.Table[table].Rows[row]["Enable"];这是一种很死的办法,如果只有几个菜单当然可以这样做。但是有很多菜单项时就不好了,也不利于代码复用。我想要的是如何在此赋值语句前,确定mnuFile是否对应dataSet.Table[table].Rows[row],而且不用mnuFile.Text比较。
      

  10.   

    菜单项的Mnemonic属性你可以做做文章
      

  11.   

    我说的索引是窗体(Form)中控件的索引的索引,比如在Form的构造函数中添加下面语句:
    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");
    }
      

  12.   

    菜单项为什么没有Name属性?你给它赋一个不就得了?
      

  13.   

    从MenuItem派生一个类来解决这个问题,需要用到MenuItem的地方都使用MyMenuItem来代替:using System.Windows.Forms;class MyMenuItem : MenuItem
    {
      string name;
      public string Name
      {
        get { return name;  }
        set { name = value; }
      }
    }
      

  14.   

    YYKXQ(异域狂想曲)
    你的方法直接比较控件是不错。但我的问题是用户权限信息存在数据库中,只能用字符串的形式保存判断。要在控件和字符串之间比较,如菜单项mnuBase和"mnuBase"如何确定一种对等关系。
      

  15.   

    Mnemonic属性不行,如果用它还不如用Text属性呢菜单项为什么没有Name属性?你给它赋一个不就得了?要是在程序中能取得Name属性我就没这问题了。
    也真是奇怪,这么简单的Name属性为什么别的控件类都可以取到,就偏偏MenuItem类不能取到呢?微软到底是怎么想的?
      

  16.   

    wuyi8808(air|skyiv.com) 
    用派生类倒是个方法,我怎么没想到呢?大概我现在的编程很少用到面向对象的方法,面向对象地许多东西都生疏了。不过光是这样还不好用,应该可以做成组件的形式,我试试。
      

  17.   

    // 进一步,可以象 System.Windows.Forms.Control 类一样,实现一个通用的 Tag 属性
    // 还可以让继承类的类名也叫 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; }
        }
      }
    }