问题描述
在MyUI.dll中有Form1;usingSystem;usingSystem.Windows.Forms;namespaceMyUI{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}publiceventEventHandlerAdd;publiceventEventHandlerRemove;}}
在MyForm.Interface.Dll中有方法返回Form(Form1)usingSystem.Windows.Forms;namespaceMyForm.Interface{publicclassClass1{publicstaticFormGetForm(){Formfm=newMyUI.Form1();returnfm;}}}
现在HeForm.dll调用MyForm.Interface.dll中的“Class1.GetForm()”方法得到FormusingSystem;usingSystem.Windows.Forms;namespaceHeForm{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privatevoidbutton1_Click(objectsender,EventArgse){Formfm=MyForm.Interface.Class1.GetForm();}}}
此时,如何得到在"MyUI.Form1"中的自定义事件"Add"和"Remove"?注:返回值是:System.Windows.Forms.Form
解决方案
解决方案二:
Formfm=MyForm.Interface.Class1.GetForm();fm.Add+=...就可以了事件本身是封装的,如果你要得到委托,需要反射。
解决方案三:
解决方案四:
引用1楼caozhy的回复:
Formfm=MyForm.Interface.Class1.GetForm();fm.Add+=...就可以了事件本身是封装的,如果你要得到委托,需要反射。
因为返回值是"Form",无法这样直接注册呀.
解决方案五:
引用2楼freednc的回复:若以System.Windows.Forms.Formfm=newForm1();此时如何注册Form1中的自定义事件(EventEventHandler)Add.
解决方案六:
fm.Add+=
解决方案七:
Form1fm=MyForm.Interface.Class1.GetForm()asForm1;
解决方案八:
引用6楼caozhy的回复:
Form1fm=MyForm.Interface.Class1.GetForm()asForm1;
得到的是一个"System.Windows.Forms.Form"不是"Form1";这种情况下有没有注册自定义事件的办法?在无法获得"Form1"结构的情况,通过"Form"去注册原"Form1"中的自定义事件.