方法原型:public void EditingPart(XElement xml, System.Windows.Forms.FormClosedEventHandler end) 但是使用时编译通不过:_Hooks.EditingPart(pt.Parameter,dlg.FormClosed);说事件智能+=或-=使用dlg是Winform 请问我想在方法内给事件绑定委托该如何做?
解决方案 »
- c# 问题
- string字符串的两种初始化方法有什么区别?
- 谁知道这个代码是什么意思哦。
- 关于绘图的问题,急待解决!!
- 如何用C#在DLL文件中创建共享数据段?
- 我用强类型dataset绑定DataGridView,如何将选中的currentrow又付给强类型dataset的row呢
- 用这个WebClient 编写自动表单提交的东东 这个__VIEWSTATE 怎么提交啊,大侠指教
- 为什么遍历不到动态添加的控件?
- 一个有关Socket的BeginAccept问题
- 在 WINME 中,使用 Remoting 后带来一个不大不小的问题。
- 关于TFS2010:*.vspscc以及*.vssscc被提交到代码管理服务器上是否正常??!
- 急救!关于C#的动作捕捉
public class a
{
public delegate void add(int a,int b);
public event add onadd;
public void run()
{
onadd(1,2)//这里触发事件
}
}public class b
{
a obj=new a();
a.onadd+=new onadd(add2);
public void add2(int a ,int b)
{
MessageBox.Show((a+b).ToString());
}
a.run();//触发事件将会调用你传进去的方法add2
}
using System.Windows.Forms;namespace WindowsFormsApplication4
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} public void EditingPart(string xml, System.Windows.Forms.FormClosedEventHandler end)
{
Console.WriteLine(xml);
if (end != null)
{
end(this,new FormClosedEventArgs(CloseReason.FormOwnerClosing));
}
}
private void button1_Click(object sender, EventArgs e)
{
EditingPart("ddd",this.Form1_FormClosed);
} private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
Console.WriteLine("e.CloseReason" + e.CloseReason);
}
}
}
输出结果:ddd
e.CloseReasonFormOwnerClosing
事件是一种安全的使用委托的方法,防止有人修改、随意触发事件。只有对象自己才可以触发自己的事件。要强行触发其它对象自己的事件,那么你需要在你的end参数传递触发事件的对象,并且反射来触发事件。
public void EditingPart(XElement xml, System.Windows.Forms.FormClosedEventHandler end)
[answer]
这个声明还是挺好的
[your]
但是使用时编译通不过:
_Hooks.EditingPart(pt.Parameter,dlg.FormClosed);
[answer]
这样不行,因为事件本身是属性,返回值可能是null,你可以尝试获取事件的绑定函数,然后调用,例如:例如,这样来获取列表private void Form6_Load(object sender, EventArgs e)
{
TestPT pt = new TestPT();
Form6 _Hooks = new Form6();
Form dlg = new Form();
dlg.FormClosed += delegate { MessageBox.Show("Test"); };
FieldInfo fi = dlg.GetType().GetField("FormClosed", BindingFlags.Instance | BindingFlags.NonPublic);
FormClosedEventHandler del = fi.GetValue(dlg) as FormClosedEventHandler;
_Hooks.EditingPart(pt.Parameter, del);
}public void EditingPart(XElement xml, System.Windows.Forms.FormClosedEventHandler end)
{ }public class TestPT
{
public XElement Parameter = new XElement("",null);
}