Click event handlering from form to usercontrol

Viewed 50

Hey guys I wanna ask how forward event handler for click on dynamic generate buttons. This buttons I generate to flowlayout panel in Form1.cs I generate usercontrol "btnMini.cs" where I have it 2 button. How can i forward click event for these buttons from Form1 to UserControl - "btnMini.cs" ? I wanna after click on button forward and get messagebox.show where is "Parent name of button" and other show me "button name". How can I do it from Form1?

Button btn = (Button)sender;
MessageBox.Show("button name: " + btn.Name + ", Parent name control: " + btn.Parent.Name);

I try this but I dont know how do it when I need create MessageBox.Show in Form1 after Clicking.... Thank you for advice. I am little hopeless how do it :/ so thanks very body for tips. Code:

public partial class btnMini : UserControl
{
    public btnMini()
    {
        InitializeComponent();
    }
    
    [Browsable(true)]
    [Category("ActionClick")]
    [Description("Invoke when user clicks on button")]
    public event EventHandler ButtonClick;//ok
   
    private void TestingClicks(object sender, EventArgs e)
    {
        ButtonClick?.Invoke(sender, e);
    }
    
    public void OnClick(object sender, EventArgs e)
    {
        TestingClicks(sender, e);           
    }
}

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    
    #region variables
    
    private int counter = 1;
    private btnMini btnM = new btnMini();
    private List<Control> control = new List<Control>();
    
    //public event EventHandler ClickTest;
    
    #endregion

    //Using this method I adding userControl to list
    private void button1_Click(object sender, EventArgs e)
    {
        //Button btn = (Button)sender;
        //MessageBox.Show("Click btn: " + btn.Name + ", Parent name control: " + btn.Parent.Name); //Here I tried do this for get Name of parent and button UserControl - btnMini.cs

        btnM = new btnMini();
        btnM.Name = "btn_" + counter;
        btnM.Click += (s, ev) =>
        {
            Button b = (Button)sender;
            //string parent = button?.Parent?.Name;
            MessageBox.Show(b.Name.ToString());
        };
        counter++;
        control.Add(btnM);
    }
    
    //method for adding UserControl from List.
    private void button2_Click(object sender, EventArgs e)
    {
        foreach (var b in control)
        {
            this.flowLayoutPanel1.Controls.Add(b);
        }
    }
}

enter image description here

1 Answers
btnM.ButtonClick += (sender, e) =>
{
    Button btn = (Button)sender;
    MessageBox.Show("Parent name: " + btn.Parent.Name + ", button name: " + btn.Name);
};

After testing and playing with code It's finally working.

Related