當我點擊一個按鈕時,我需要能夠將兩個對象傳遞給正在觸發的方法。我該怎麼做呢?如何將變量傳遞給按鈕事件方法?
到目前爲止,我一直在尋找創造改變的EventArgs:
public class CompArgs : System.EventArgs
{
private object metode;
private Type typen;
public CompArgs(object m, Type t)
{
this.metode = m;
this.typen = t;
}
public object Metode()
{
return metode;
}
public Type Typen()
{
return typen;
}
}
但我會怎麼用呢?是否有可能以某種方式覆蓋按鈕的點擊事件以使用自定義事件處理程序,它將CompArgs作爲參數?
private void button1_Click(object sender, EventArgs e)
{
Assembly assembly = Assembly.LoadFile(@"c:\components.dll");
int counter = 0;
foreach (Type type in assembly.GetTypes())
{
if (type.IsClass == true)
{
Button btn = new Button();
btn.Location = new Point(174 + (counter * 100),10);
btn.Size = new Size(95, 23);
btn.Name = type.Name;
btn.Text = type.Name;
btn.UseVisualStyleBackColor = true;
this.Controls.Add(btn);
object obj = Activator.CreateInstance(type);
//I need to pass on obj and type to the btn_Click
btn.Click += new eventHandler(btn_Click);
counter++;
}
}
}
而且事件方法,其中我需要它:
private void btn_Click(object sender, CompArgs ca)
{
MessageBox.Show((string)ca.Typen().InvokeMember("getMyName",
BindingFlags.Default | BindingFlags.InvokeMethod,
null,
ca.Metode(),
null));
}
您可以通過派生自Button類來重寫OnClick方法。已經使用這種技術添加了答案。 – Ian 2011-01-27 11:42:46