代码中动态创建控件并且加载成功,
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中方法,求懂,先谢过
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中方法,求懂,先谢过
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]);
}
}
}
如果非要用反射给每个控件调用不同的方法的话,可以这样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);
还有第三个问题:combo = new ToolStripComboBox(Title);
combo.Tag =ID;
combo.Visible = True;
toolStrip1.Items.Add(combo);
combo.SelectedIndexChanged += new EventHandler(combo_SelectedIndexChanged);以上代码中动态创建控件并且加载成功,但是注册的事件不能触发是否一定要在 toolStrip1.Items.Add 之前注册事件?如果不一定,求方法