Wali Ahmed
Wali Ahmed

Reputation: 35

Use Panel.Click (of Dynamic Panels) event on Button.Click C# Windows Forms

I have Dynamically generated panels on my Form, every panel has multiple controls including TextBoxes, ComboBoxes and Buttons. I want to catch their values on a "Save" Button which is not dynamically generated (its in the form). I'm getting the Values with this code:

private void GetPanelControls(object sender, EventArgs e)
        {
            Panel allpanels = sender as Panel;
            panelname = ItemsIDSelected[panelnamecounter] + "p";
            //"p" identifies Panel and there is a counter with a list
            if (allpanels.Name == panelname)
            {
                foreach (Control item in allpanels.Controls)
                {
                    if (item.Name == (ItemsIDSelected[panelcontrolcounter] + "t"))  //"t" identifies TextBox
                    {
                        ItemsNameListforInsert.Add(item.Text);
                        panelcontrolcounter++;     //Panel has multiple controls
                    }
                    panelnamecounter++;             //There are multiple Panels
                }

            }
        }

How can I call this event on my Button_Click Event??

Panel panelGroup = new System.Windows.Forms.Panel();
panelGroup.Click += new EventHandler(GetPanelControls);

This is how Im Generating Panels and its event.

Upvotes: 0

Views: 2926

Answers (2)

senthilkumar2185
senthilkumar2185

Reputation: 2578

        //Control create button   
          private void button1_Click(object sender, EventArgs e)
                    {

                        Panel pnl = new Panel();
                        pnl.Name = "pnltest";
                        pnl.Location = new Point(500, 200);
                        TextBox txt1 = new TextBox();
                        txt1.Name = "txttest";
                        txt1.Location = new Point(0 ,10);
                        pnl.Controls.Add(txt1);
                        ComboBox cmb = new ComboBox();
                        cmb.Location = new Point(0, 50);
                        cmb.Name = "cmbtest";
                        cmb.Items.Add("one");
                        cmb.Items.Add("two");
                        cmb.Items.Add("three");
                        pnl.Controls.Add(cmb);
                        Button btn = new Button();
                        btn.Name = "btntest";
                        btn.Text = "submit";
                        btn.Location = new Point(0, 75);
                        btn.Click += btn_Click;
                        pnl.Controls.Add(btn);
                        this.Controls.Add(pnl);


                    }
//control button click event
     void btn_Click(object sender, EventArgs e)
            {
                foreach (Control frmcntrl in this.Controls)
                {
                    if (frmcntrl is Panel)
                    {
                        if (frmcntrl.Name == "pnltest")
                        {
                            foreach (Control item in frmcntrl.Controls)
                            {
                                if (item is TextBox)
                                {
                                    if (item.Name == "txttest")
                                    {
                                        MessageBox.Show(item.Text .ToString());
                                    }
                                }
                                else if (item is ComboBox)
                                {
                                    if (item.Name == "cmbtest")
                                    {
                                        MessageBox.Show(item.Text);
                                    }
                                }
                            }
                        }
                    }
                }
            }

Upvotes: 1

Dilan Wickramarathna
Dilan Wickramarathna

Reputation: 349

you can try something like this

private void Button_Click(object sender, EventArgs e)
{
    GetPanelControls(this, new EventArgs());
}

EDIT

What if we use a method for this without using panel click event, if you need you can call this method inside the panel click event

    private void GetPanelControls()
    {
        foreach (Control formControl in this.Controls)
        {
            if (formControl is Panel)
            {
                string panelName = ItemsIDSelected[panelnamecounter] + "p";

                if (formControl.Name == panelName)
                {
                    foreach (Control item in formControl.Controls)
                    {
                        // Your Code
                    }
                }
            }
        }
    }

Upvotes: 1

Related Questions