1.Some modification in your dll as follows
//Define an event handler
public EventHandler myClick = null;
// in some event function such click event
if( myClick != null )
myClick( sender, e );//to invoke event which is inited by main form
2.Change your way to init child form in main form
Assembly ass = Assembly.LoadFile( yourDllFile );
if( ass != null )
{
Type typForm = ass.GetType( "Namespace.Formname" );
if( typForm == null ) return;
Form frmTest = typForm.InvokeMember( null,
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.CreateInstance,
null,
null,
null ) as Form;
if( frmTest == null ) return;
//Bind event here
EventHandler eventClick = new EventHandler( MyClick );
foreach( FieldInfo fi in typForm.GetFields( ) )
{
if( fi.Name == "myClick" )
fi.SetValue( frmTest,eventClick );
}
frmTest.ShowDialog();
}
//Define a function for child form
public void MyClick( object sender, EventArgs e )
{
Debug.WriteLine( e.ToString() );
}
我代码如下:
主窗体代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
namespace CallDll
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}