代码中动态创建控件并且加载成功,
combo = new ToolStripComboBox(Title);
combo.Tag =ID;
combo.Visible = True;
toolStrip1.Items.Add(combo);关于事件的触发也google了一下,大概就两种方法吧
1.根据tag进行判断,用下面代码添加事件
combo.SelectedIndexChanged += new EventHandler(combo_SelectedIndexChanged);
然后在combo_SelectedIndexChanged事件中对tag判断,2,反射,
combo.SelectedIndexChanged += new EventHandler(Title+"_SelectedIndexChanged");
可以将上一句中的字符串 Title+"_SelectedIndexChanged" 反射成 对应的事件
比如 "test_SelectedIndexChanged"这样的字符串可以反射成 test_SelectedIndexChanged 事件第2中方法,求懂,先谢过

解决方案 »

  1.   

    可以直接注册事件啊            RadioButton r = new RadioButton();//实例化一个Radiobutton
                for (int i = 0; i < list2.Count; i++)//循环list2数组,创建与数组成员相同个数的Radiobutton
                {
                    r = new RadioButton();
                    r.Text = list2[i];
                    r.Name = i.ToString();
                    r.Width = 50;
                    r.Location = new Point(48 * (i + 1), -6);//确认放入的Radiobutton的位置,防止重复
                    this.Controls.Add(r);//将创建好的Radiobutton放入控件集合中
                    r.CheckedChanged += new EventHandler(r_CheckedChanged);//注册每个Radiobutton的事件
                }        /// <summary>
            /// 单选按钮被选中后执行的事件
            /// </summary>
            /// <param name="sender"></para m>
            /// <param name="e"></param>
            private void r_CheckedChanged(object sender, EventArgs e)
            {
                RadioButton rad = sender as RadioButton;
                if (rad.Checked)
                {
                    for (int i = 0; i < list4.Count; i++)
                    {
                        comboBox1.Items.Add(list4[i]);
                    }
                }
            }
      

  2.   

    一般第一种方法就可以了
    如果非要用反射给每个控件调用不同的方法的话,可以这样public class EventHelper<EventType> where EventType : class
            {
                private EventType _delegate = null;            public EventHelper(Type type, string methodName, object obj)
                {
                    if (type == null) { throw new ArgumentNullException("type"); }                MethodInfo mi = null;                if (obj == null)
                    {
                        mi = type.GetMethod(methodName, BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
                    }
                    else
                    {
                        mi = obj.GetType().GetMethod(methodName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
                    }                if (mi == null) { return; }                this._delegate = Delegate.CreateDelegate(typeof(EventType), obj, mi) as EventType;
                }            public static implicit operator EventType(EventHelper<EventType> eh)
                {
                    return eh._delegate;
                }
            }
    用的时候combo.SelectedIndexChanged += new EventHelper<EventHandler>(this.GetType(), Title+"_SelectedIndexChanged", this);
      

  3.   

    非常感谢两位的回答
    还有第三个问题:combo = new ToolStripComboBox(Title);
    combo.Tag =ID;
    combo.Visible = True;
    toolStrip1.Items.Add(combo);
    combo.SelectedIndexChanged += new EventHandler(combo_SelectedIndexChanged);以上代码中动态创建控件并且加载成功,但是注册的事件不能触发是否一定要在 toolStrip1.Items.Add 之前注册事件?如果不一定,求方法