我想使一个窗口不被重复显示,采用了单例模式。代码如下:public static  FrmClient singleForm=null;
prviate FrmClient()//Form parent)
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
//this.MdiParent =parent; //
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
} public static FrmClient  getInstance()
{ if(singleForm==null || singleForm.IsDisposed)
{ singleForm=new FrmClient (); } return singleForm; }调用代码:
               string filePath=Application.StartupPath +dllFileName ;
try
{

      Assembly assembly = Assembly.LoadFrom(filePath);
Type type = assembly.GetType(typeName); 

System.Reflection.MethodInfo method = type.GetMethod("getInstance");
object [] parameters = method.GetParameters();
object obj = Activator.CreateInstance(type);
Form result =(Form) method.Invoke(obj,parameters );          //result.Dock=DockStyle.Fill ;
   // result.FormBorderStyle =FormBorderStyle.None ;
result.TopLevel =false;
result.WindowState=FormWindowState.Maximized ;
result.Controls.Clear ();
panelRight.Controls.Add (result);
result.Show();
return true;
由于在dll中的类prviate FrmClient()设为private,所以object obj = Activator.CreateInstance(type);这句无法建立,把它设为public,但显示出来的窗口中无控件,正常情况下有。请问有没有好的解决方法。

解决方案 »

  1.   

    没太明白意思,是不是要抑制此子窗体在MDI中被重复打开啊?
      

  2.   

    sorry,不好意思,没有控件的原因找到了,不过按单例模式,那个地方应该是private,但用动态调用就不行了,改成public 可以吗
      

  3.   

    但用动态调用就不行了,改成public 可以吗
    -----------
    当然不可以,如果是public,那谁都可以调用构造函数new一个新的对象了
    这怎么还是单例呢?
      

  4.   

    你掉进模式误区了,根据你的情况,可以根据FrmClient类抽象一个接口IFrmClient,由FrmClient类实现该接口.
    动态调用的时候初始化该接口类型,然后将该类型通过调用getInstance()获得引用:IFrmClient = getInstance();我想你的问题到现在应该解决了!还有什么问题可以发消息给我,不忙的时候我会即使回负的!msn:[email protected]
      

  5.   

    参考,
    http://blog.csdn.net/zhzuo/archive/2004/07/16/42685.aspx