mrb*_*rbm 9 .net c# controls event-handling winforms
我想复制像Button,TextBox等控件.但我不知道如何将事件处理程序方法(如Click
)复制到新控件.
我现在有以下代码:
var btn2 = new Button();
btn2.Text = btn1.Text;
btn2.size = btn1.size;
// ...
btn2.Click ??? btn1.Click
Run Code Online (Sandbox Code Playgroud)
有没有其他方法来复制控件?
Ale*_*Aza 14
要克隆任何WinForms控件的所有事件:
var eventsField = typeof(Component).GetField("events", BindingFlags.NonPublic | BindingFlags.Instance);
var eventHandlerList = eventsField.GetValue(button1);
eventsField.SetValue(button2, eventHandlerList);
Run Code Online (Sandbox Code Playgroud)
您只需要为新的按钮控件添加事件处理程序方法.C#使用+=
运算符来执行此操作.所以你可以简单地写:
btn2.Click += btn1_Click
Run Code Online (Sandbox Code Playgroud)
或者,一种更强大的方法是使用反射.这里特别有用的是EventInfo.AddEventHandler
方法.