简体   繁体   中英

Programmatically add Click EventHandler to Button

I'm creating Buttons programmatically with a method and am wanting to attach a Click event handler. However, that data currently comes from a string parameter which can't be used with += RoutedEventHandler .

public Button CreateButton(string Display, string Name, string ClickEventHandler)
{
    Button Btn = new Button
    {
        Content = Display,
        Name = "Btn_" + Name
    };
    Btn.Click += new RoutedEventHandler(ClickEventHandler);

    return Btn;
}

void Btn_save_Click(object sender, RoutedEventArgs e)
{
    throw new NotImplementedException();
}

// later
Button MyButton = CreateButton("Save", "save", "Btn_save_Click");

Error is RoutedEventHandler expects a Method and not a String . Is there a different approach to programmatically binding events that allows this sort of behaviour? Thanks

From what I understand you wish to pass the method that should be executed when Click event is triggered. You could do something along the lines of:

Button button = CreateButton("Save", "save", (s, e) => SomeOnClickEvent(s, e));
Button button2 = CreateButton("Create", "create", (s, e) => SomeOtherOnClickEvent(s, e));

public Button CreateButton(string display, string name, Action<object, EventArgs> click)
{
    Button b = new Button()
    {
        Content = display,
        Name = $"Btn_{name}"
    };

    b.Click += new EventHandler(click);

    return b;
}

void SomeOnClickEvent(object sender, EventArgs e)
{

}

void SomeOtherOnClickEvent(object sender, EventArgs e)
{

}

I am not entirely sure what you are trying to accomplish with this.

Here is an example of how to create an event at run time.

public void CreateButton()
{
  Button Btn = new Button();

  Btn.Click += new EventHandler(btn_Clicked);


}

private void btn_Clicked(object sender, EventArgs e)
{
 // Your Logic here
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM