我想把button1.Click的事件方法赋给button2(button1.Click的方法不确定)
button2.Click += button1.Click; //报错,Click只能出现在+=或-=的左边想取消button1.Click事件的方法
button1.Click -= ? (Click事件的方法不确定时该如何取消?)

解决方案 »

  1.   

    好像可以这样this.button2.Click += new System.EventHandler(this.button1_Click);
    this.button1.Click-=new System.EventHandler(this.button1_Click);
      

  2.   

    参考一下:
    http://topic.csdn.net/u/20080821/08/406d6ac7-73ea-4ebd-863a-f25963d757f6.html
      

  3.   

    你看下这个,可能对你有帮助
    http://blog.csdn.net/zxkid/archive/2006/12/15/1444396.aspx
      

  4.   

            private void button1_Click(object sender, EventArgs e)
            {
                MessageBox.Show("S");
            }        private void Form1_Load(object sender, EventArgs e)
            {
                button2.Click += delegate { button1_Click(sender,e); };
            }
      

  5.   

    你的意思是要获取button1.Click事件的方法名?
      

  6.   

    有一段代码,不知道有没有帮助。//--------------------------------------------------------------- 
    // 函数功能:给控件或窗体及其子控件加载事件 
    //'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(); 
      

  7.   

    还是谢谢13楼,但你的方案好象也是事先知道了事件的名称而已. 另外,我觉得注释最好写成xml格式的那种.
    我再把问题说具体一点:    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; //这地球人都知道
            }
        }
      

  8.   

    lz为什么不肯看看我给你的那个例子呢,我写了一个,希望对你有用吧:        private void Form1_Load(object sender, EventArgs e)
            {
                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);
            }
      

  9.   

    谢谢,
    回LS,那个例子我早就看过了,看不明白,他那是一般委托,我这是Event事件,不知道有一个EventClick关键字.呵呵.