object obj="m01";   
MenuItem mi=(MenuItem)obj;运行时报错,也不能对字符强制转换,,如何才能把它转过来?调了好久...:(

解决方案 »

  1.   

    字符型当然不能强制转换为MenuItem
      

  2.   

    你是不是想让mi等于另一个名叫m01的对象?可以考虑用反射
      

  3.   

    也可以,我记得我过去曾用这样的方法,自定义一个派生于decimal的类,然后这个类可以与string类转换(非强制),这个类也可以和decimal类相互转换(也非强制),最后的结果是,系统认可了string和decimal的非强制转换,也就是说,decimal a ="0.1235"居然没报错,我的这个项目是2002年的,很久没修改过了,我一会试着看看能不能找到,找到的话,通知你.
      

  4.   

    try MenuItem mi=new MenuItem(...);
      

  5.   

    这种情况下,要用反射,
    使用反射生成一个窗体:
    private void button1_Click(object sender, System.EventArgs e)
    {
    Assembly assm = Assembly.LoadFrom("e:\\WindowsApplication.dll");
    Type TypeToLoad= assm.GetType("WindowsApplication.Form1");

    object obj;
    obj = Activator.CreateInstance(TypeToLoad);
    Form formToShow = null;
    formToShow = (Form)obj;
    formToShow.Show();

    }另外参考,
    http://www.c-sharpcenter.com/CSNET/dynamicinvoke.asp
    http://www.c-sharpcorner.com/Code/2002/April/LoadingAssemblyInfo.aspDynamically load a class and execute a method in .NET
    http://www.codeproject.com/csharp/DynLoadClassInvokeMethod.asp
      

  6.   

    To:zhzuo(秋枫)
       看了你的那个例子,但取不到Form1里面的MenuItem项,在assm.GetType("WindowsApplication.Form1");理想应该改为:assm.GetType("WindowsApplication.Form1.m01")但实际上是不可能的,因为不可把MenuItem m01 定义成公用静态变量,用this.m01也不行,所以后面的CreateInstance等都没有意义了...
       看了后面的一些参考,好像都解决不了问题,To:jointan() 
       怎么测了下,转不了,,转得了decimal,但decimal向MenuItem转还是个问题,=============重说明一下具体意图======================
    在主窗体里面定义了几个菜单项,现在对用户分配权限,菜单项name存到数据库中去,但从数据库中取出菜单的ID后,就没法跟那个菜单对应起来,MenuItem的所有属性,方法都不行...
    本来用数据库动态加载菜单可以解决问题,但领导不同意..
      

  7.   

    你是不是要这种效果?
    public System.Windows.Forms.MenuItem GetMenuItem(object form,string menuName)
            {
                Type t = form.GetType();
                System.Reflection.FieldInfo info = t.GetField(menuName, System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
                if (info != null)
                {
                    MenuItem item = info.GetValue(form) as MenuItem;
                    return item;
                }
                return null;
            }