一个MDI你窗口,里面包含有子窗口;
 我希望在出现子窗口的时候,把子窗口的所有Button 功能 添加到ToolBar里。我是这样实现的,在当前子窗口激活事件中,对ToolBar的Items进行操作。问题是::  ToolBar 里的 Click 事件如何邦定 子窗口Button 的 Click 事件呢?
        如里是Java哪就好办了,用doClick真接触发Button的click事件!~在C#里没有吗。??---------------------------------------------------------------简单的问:: 根据以使用环境, Java 里 Button 的 doClick();方法,在c#里如何实现 ?---------------------------------------------------------------  //当前活动窗口
           curForm = ((Forms.BaseForm)this.ActiveMdiChild);
      //遍历所有窗体控件
           foreach (Object obj in curForm.Controls)
           {
               //查找所有按钮类型
               if (obj.GetType() == typeof(Button)) 
               {
                ToolStripButton toolbtn = new ToolStripButton();//创建工具按键
                   Button btn = obj as Button;//得到按扭实例
                     
                   toolbtn.Text = btn.Text;
                   toolbtn.Name = "t_" + btn.Name;
                   //怎样触发btn的Click事件呢?
                       ...
                       ...
               }

解决方案 »

  1.   

    Button有一个OnClick的成员函数,不过是保护的,无法从外部调用.
    有两个方案:方案一、扩展Button并将OnClick公开    class MyButton : Button
        {
            public void OnClick(EventArgs e)
            {
                base.OnClick(e);
            }
        }
    把有关的Button button1 全部改成MyButton button1
    把button1 = new Button 改成button1 = new MyButton
    这样一来,你就可以在点击toolbtn的时候触发,OnClick了:
        if (obj.GetType() == typeof(MyButton))
        {
            ToolStripButton toolbtn = new ToolStripButton();//创建工具按键
            MyButton btn = obj as MyButton;//得到按扭实例        toolbtn.Text = btn.Text;
            toolbtn.Name = "t_" + btn.Name;        toolbtn.Click += delegate
            {
                btn.OnClick(EventArgs.Empty);   // <-----调用OnClick
            };
        }方案二、用Reflection(虽然简单,个人不太喜欢,因为调用保护成员违背了封装的原意)
    System.Reflection.MethodInfo mi = typeof(Button).GetMethod(
       "OnClick",
       System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance
       );//遍历所有窗体控件
    foreach (Object obj in curForm.Controls)
    {
        if (obj.GetType() == typeof(Button))
        {
           ToolStripButton toolbtn = new ToolStripButton();//创建工具按键
            Button btn = obj as Button;//得到按扭实例        toolbtn.Text = btn.Text;
            toolbtn.Name = "t_" + btn.Name;        toolbtn.Click += delegate
            {
               mi.Invoke(btn, new object[] { EventArgs.Empty });
            };
        }
    }