反射出事件列表的方法
如果是 自己写的类直接反射成员就可以获取到委托集合了
例如
public class Test
{
public delegate void Show();
public event Show OK;
}
我们在代码中写
private void button1_Click(object sender, EventArgs e)
{
Test _TestEvent = new Test();
_TestEvent.OK += new Test.Show(_TestEvent_OK1);
_TestEvent.OK += new Test.Show(_TestEvent_OK2);
Delegate[] _DelegateList= GetObjectEventList(_TestEvent, "OK");
if (_DelegateList != null)
{
for (int i = 0; i != _DelegateList.Length; i++)
{
_DelegateList[i].DynamicInvoke(new object[] { });
}
}
}
void _TestEvent_OK1()
{
MessageBox.Show("OK1");
}
void _TestEvent_OK2()
{
MessageBox.Show("OK2");
}
这样我们可以灵活的获取绑定的事件,并且调用。
虽然有点违背了设计。但有时候还是有点用的。
下面是WINFORN控件的获取
private void button1_Click(object sender, EventArgs e)
{
PictureBox _PictureBox = new PictureBox();
_PictureBox.Click += new EventHandler(_PictureBox_Click1);
_PictureBox.Click += new EventHandler(_PictureBox_Click2);
Delegate[] _ControlDelegate = GetObjectEventList(_PictureBox, "EventClick");
if (_ControlDelegate != null)
{
for (int i = 0; i != _ControlDelegate.Length; i++)
{
_ControlDelegate[i].DynamicInvoke(new object[] { _PictureBox,null});
}
}
}
void _PictureBox_Click1(object sender, EventArgs e)
{
MessageBox.Show("ok1");
}
void _PictureBox_Click2(object sender, EventArgs e)
{
MessageBox.Show("ok2");
}
一般来说控件事件前加个 Event ..例如 DoubleClick事件 前加个Event 用EventDoubleClick来获取..