我有个主程序,一个有窗体的DLL 
主程序通过 Assembly.LoadFrom  动态加载的DLL 
DLL 的窗体上有个 数据保存的按钮,如何在保存后 通知主程序数据保存成功????
最好有代码,谢谢!!!!!!!

解决方案 »

  1.   

    子窗口定义一个Delegate.父窗口new完子窗口,后给delegate赋值。子窗口数据保存后,调用这个Delegate实例。
      

  2.   


    父窗口 也需要定义一个 Delegate 吗?
    有较详细的代码吗? 谢谢!!!
      

  3.   

    子窗口:
    public delegate void TaskComplateDelegate ();public TaskComplateDelegate TaskComplateCallback;任务完成后
     if (TaskComplateCallback != null)
         TaskComplateCallback();主窗口SubForm subForm = new SubForm();
    subForm.TaskComplateCallback = new TaskComplateDelegate(SubformComplate);private void SubformComplate()
    {....
    }这样子窗口就不依赖父窗口了。代码都是手写的,可能有些许错误,但是意思已经表述明确了。
      

  4.   

    可以看看这篇文章:
    Using Delegates to Communication Between Windows Forms
    http://www.c-sharpcorner.com/UploadFile/mosessaur/winformsdelegates09042006094826AM/winformsdelegates.aspx
      

  5.   

    或者看看这个:C#窗口间控制 通过委托及事件实现
    http://hi.baidu.com/xinerlian/blog/item/26ed58b7144341f230add13c.html
      

  6.   

    谁会有现成的代码阿楼主,只能告诉你怎么做了,你在Dll中扩展进去一个bool变量,如果数据保存则bool值改变,然后再外层在次动态调用一下DLL,这次只调DLL中的Bool,这样就可以判断你是否保存成功了,我遇到过这个情况,不过是在WIN8WINRT和C#交互时遇到的,情况是一样的,你可以看下方法。http://dongtingyueh.blog.163.com/blog/static/4619453201252712631541/
      

  7.   


    Assembly ass = Assembly.LoadFrom(strFileDll);
    Type type = ass.GetType( +"Test.Init");//
    Object obj = Activator.CreateInstance(type, null);//
    Form frmObj = (Form)obj;//subForm.TaskComplateCallback = new TaskComplateDelegate(SubformComplate);
    这里我该怎么写???
      

  8.   


    Assembly ass = Assembly.LoadFrom(strFileDll);
    Type type = ass.GetType( +"Test.Init");//
    Object obj = Activator.CreateInstance(type, null);//
    Form frmObj = (Form)obj;//subForm.TaskComplateCallback = new TaskComplateDelegate(SubformComplate);
    这里我该怎么写???
      

  9.   

    如果父Form不知道subform的类型,就比较麻烦了。看看这个,应该可以,不过估计要在subform中中使用Event,而不是自定义的Delegate.
    http://msdn.microsoft.com/en-us/library/ms228976(v=vs.100).aspx还有一个办法,是加入一个新的工程,在里面定义interface. 像SetCompleteCall(TaskCompleteDelegate callback); subform和父form都引用这个新工程。
    Subform实现interface. 父form中 强制转换成interface 类型,并调用SetCompleteCall函数。
    InterfaceType frmObj = (InterfaceType)obj;
    frmObj.SetCompleteCall(***);这种方法要把delegate定义到interface中。
      

  10.   

    其实最简单的办法,是引用subform所在的assembly.