我想把button1.Click的事件方法赋给button2(button1.Click的方法不确定)
button2.Click += button1.Click; //报错,Click只能出现在+=或-=的左边想取消button1.Click事件的方法
button1.Click -= ? (Click事件的方法不确定时该如何取消?)
button2.Click += button1.Click; //报错,Click只能出现在+=或-=的左边想取消button1.Click事件的方法
button1.Click -= ? (Click事件的方法不确定时该如何取消?)
this.button1.Click-=new System.EventHandler(this.button1_Click);
http://topic.csdn.net/u/20080821/08/406d6ac7-73ea-4ebd-863a-f25963d757f6.html
http://blog.csdn.net/zxkid/archive/2006/12/15/1444396.aspx
{
MessageBox.Show("S");
} private void Form1_Load(object sender, EventArgs e)
{
button2.Click += delegate { button1_Click(sender,e); };
}
// 函数功能:给控件或窗体及其子控件加载事件
//'con:控件
// 创建标识:[ghli][2008-07-25]
//----------------------------------------------------------------
protected void RecurControls(Control con)
{
con.Enter += Controls_Enter;
con.Leave += Control_Leave;
con.MouseMove += Control_MouseMove;
}
//---------------------------------------------------------------
// 函数功能:给控件或窗体及其子控件取消Enter及Leave等事件
//'con:控件
// 创建标识:[ghli][2008-9-01]
//----------------------------------------------------------------
protected void RomoveControls(Control con)
{
con.Enter -= Controls_Enter;
con.Leave -= Control_Leave;
con.MouseMove -= Control_MouseMove;
con.KeyDown -= Control_KeyDown;
}
//---------------------------------------------------------------
// 函数功能:当窗体的控件获得焦点时给其Tag赋值,同时注册Key_down事件,如果父节点有容器则注销事件
// 创建标识:[ghli][2008-08-]
//----------------------------------------------------------------
private void Controls_Enter(object sender, System.EventArgs e)
{
//赋Tag
Control con = new Control();
sender.tag = null;
con = sender;
con.Tag = sender.name;
while (((con.Parent != null))) {
sender.tag += con.Parent.Name;
con = con.Parent;
//如果为容器则不让其注册KeyDown事件
if (con is TabControl | con is TabPage | con is GroupBox | con is Panel) {
con.KeyDown -= Control_KeyDown;
}
}
//添加Key_Down事件
((Control)sender).KeyDown += Control_KeyDown;
} //---------------------------------------------------------------
// 函数功能:当控件不获得焦点时注销KeyDown事件
// 创建标识:[ghli][2008-08-]
//----------------------------------------------------------------
private void Control_Leave(object sender, System.EventArgs e)
{
((Control)sender).KeyDown -= Control_KeyDown;
} //---------------------------------------------------------------
// 函数功能:当鼠标移过控件上方则让其获得焦点
// 创建标识:[ghli][2008-08-]
//----------------------------------------------------------------
private void Control_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
((Control)sender).Focus();
}
我再把问题说具体一点: public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("Button1 Clicked!");
} private void button2_Click(object sender, EventArgs e)
{
MessageBox.Show("Button2 Clicked!");
} private void Form1_Load(object sender, EventArgs e)
{
//如何不写这一句,将button1的Click事件加到button2.Click中.
//也就是假定事先不知道button1.Click绑定了什么方法.
button2.Click += button1_Click; //这地球人都知道
}
}
{
Button btn1 = new Button();
btn1.Text = "button1";
btn1.Click += new EventHandler(delegate(object s, EventArgs e2) { MessageBox.Show("btn1"); });
btn1.Name = "btn1";
btn1.Location = new Point(10, 10);
this.Controls.Add(btn1);
Button btn2 = new Button();
btn2.Text = "button2";
btn2.Name = "btn2";
btn2.Location = new Point(10, 30);
Type t = btn1.GetType();
PropertyInfo pi = t.GetProperty("Events", BindingFlags.Instance | BindingFlags.NonPublic);
EventHandlerList ehl = (EventHandlerList)pi.GetValue(btn1, null);
FieldInfo fieldInfo = (typeof(Control)).GetField("EventClick", BindingFlags.Static | BindingFlags.NonPublic);
Delegate d = ehl[fieldInfo.GetValue(null)];
if (d != null)
{
foreach (Delegate temp in d.GetInvocationList())
{
Type t2 = btn2.GetType();
PropertyInfo pi2 = t2.GetProperty("Events", BindingFlags.Instance | BindingFlags.NonPublic);
EventHandlerList ehl2 = (EventHandlerList)pi2.GetValue(btn2, null);
FieldInfo fi = (typeof(Control)).GetField("EventClick", BindingFlags.Static | BindingFlags.NonPublic);
ehl2.AddHandler(fi.GetValue(null), temp);
}
}
this.Controls.Add(btn2);
}
回LS,那个例子我早就看过了,看不明白,他那是一般委托,我这是Event事件,不知道有一个EventClick关键字.呵呵.