节点不是有Tag属性吗?
把你的窗体的类的名称给到Tag上面
然后
用楼上说的办法来处理

解决方案 »

  1.   

    treeNode.tag存放相关窗体的标识
      

  2.   

    看看这段我写的vb代码对你有没有帮助.
    Dim args As Object()
                'Dim a As [Assembly]
                '怎样获取本程序序的AssemlyFullName呢? 
                Dim bf As BindingFlags = BindingFlags.GetProperty Or BindingFlags.Instance Or BindingFlags.NonPublic Or BindingFlags.Public Or BindingFlags.Static
                Dim tForm As Type = Type.GetType("YourAssemblyName" + sClassName)
    'sClassName 是个字符串,就是设置成你的窗体名了,你可以动态更改的啊
                If (Not oCurrentWindowsForm Is Nothing) Then
                    oCurrentWindowsForm.Close()
                End If
                oCurrentWindowsForm = CType(tForm.InvokeMember("DefInstance", BindingFlags.GetProperty Or bf, Nothing, Nothing, args), cCaseHistoryBaseForm)
                oCurrentWindowsForm.WindowState = FormWindowState.Maximized
                oCurrentWindowsForm.Show()
                oCurrentWindowsForm.Activate()
      

  3.   

    楼上们说的不错,不知道反射怎么做,能不能给个例子!
    还有我想把窗体作为一个实例来处理,例如
    private static volatile FunctionManage instance=null;
    public static FunctionManage Instance
    {
        get
           {
    if(null==instance)
     {
        lock(typeof(FunctionManage))
    {
       if(null==instance)
       {
    instance=new FunctionManage();
       }
    }
       } return instance;
        }
    }
    不知道各位有没有相关的经验!
      

  4.   

    参见
    Assembly.CreateInstance 方法 [C#]
    public object CreateInstance(
       string typeName
    );
      

  5.   

    http://dev.csdn.net/develop/article/46/46182.shtm
    建议看看这一篇!相信你的问题会解决掉。
      

  6.   

    继承TreeNode,在子类中包含一个Form和一个使用权限变量。
      

  7.   

    顶,看中午有没有答案
    -------------------------
    难道这些回复你还不可以知道怎么来做么?1:使用TreeNode.Tag属性把要调用打开的窗体的关键字放入其中;
    2:按你点击的节点的tag来打开这个窗体.
    3:你可以用CreateInstance来动态加载你的窗体,也可以用switch来打开你的窗体.这上面不都说了么,怎么还要答案?
      

  8.   

    不,不是那样的,那样的化我不是每个窗体是不是都要new一次呀,我这里有一百多个窗体怎么办!
    private static volatile FunctionManage instance=null;
    public static FunctionManage Instance
    {
        get
           {
    if(null==instance)
     {
        lock(typeof(FunctionManage))
    {
       if(null==instance)
       {
    instance=new FunctionManage();
       }
    }
       }return instance;
        }
    }
    我希望采用这样的模式动态调用窗体!
    或许是我理解错误把,但是现在还是没有明白怎么做!
      

  9.   

    object objForm = System.Activator.CreateInstance("WindowsApplication.Form1");
    Form form = (Form)objForm;
    form.Show();"WindowsApplication.Form1"
    你Form的完全限定名。
    楼上的兄弟,都说的很清楚了。
      

  10.   

    空手打得,上面错了,抱歉。
    Type t = Type.GetType("WindowsApplication.Form1");
    object objForm = System.Activator.CreateInstance(t);
    Form form = (Form)objForm;
    form.Show();
      

  11.   

    谢谢各位,尤其是hatita,hbxtlhx,noeye.大致原理我明白了,也作出来了!不过我还有一点想法;
    1.在实际的开发过程中是不是要把节点标识成一定规则,或者说和窗体类名称一样!
    2.通常情况下要加载的不是一个Assembly,他们的名称空间也不一定相同,需要对这个灵活处理!
    3.对与右键,Botton这样的控件如果控制权限,通常是将这样的控件不可见,该如果处理!
    4.通常权限是在登陆的时候加载的,对于每一个窗体调用不应该再和服务器进行交互进行权限验证!这只是我个人的想法和准备努力做的工作,还请各位一起学习,指导!如果我能够完成这样的工作会和大家共享!
    祝大家圣诞快乐!