How can i get the collections of controls on my current form in C#.net window application??

i want to know that How can i get the collections of controls on my current form ??

for ex.

suppose i have 12 radiobuttons on my current form then how can i get the collections for that using controlcollections command ??

i using the below code ...
ControlCollection collection = new ControlCollection(this.FindForm());

what can i do now ??
Parth48Asked:
Who is Participating?
 
DhaestCommented:
Actually the radioButtonList2 is an array, why with a reference to the control.
I would use this list for later loops...

Foreach(RadioButton rbn in radioButtonList2)
{
...    rbn.Name  ...
}
Do you just want to store the names of the controls ?

           
string[] correopt = new string[radioButtonList2.Count()];
            for (int i = 0; i < radioButtonList2.Count();i++ )
            {
                correopt[i] = radioButtonList2.ElementAt(i).Name;
            }

Open in new window

0
 
DhaestCommented:
You can easily use LINQ to perform this
this.Controls.OfType<RadioButton>

See http://www.linqhelp.com/linq-101/introduction-to-linq-interacting-with-controls-using-linq-in-c/ for more information and examples
0
 
Sudhakar PulivarthiProject Lead - EngineeringCommented:
0
Cloud Class® Course: SQL Server Core 2016

This course will introduce you to SQL Server Core 2016, as well as teach you about SSMS, data tools, installation, server configuration, using Management Studio, and writing and executing queries.

 
käµfm³d 👽Commented:
The non-Linq approach:
ControlCollection collection = new ControlCollection(this);

foreach (Control c in this.Controls)
{
    if (c is RadioButton)
    {
        collection.Add(c);
    }
}

Open in new window

0
 
Parth48Author Commented:
hi @kaufmed: u r right ...

but how can i find how many radio buttons checked true ??

is there any if condition in your coding ??
0
 
Sudhakar PulivarthiProject Lead - EngineeringCommented:
Hi
You can check whether radio button is checked as below.
if (c is RadioButton)
 {
 RadioButton tempC = c as RadioButton;
// Check whether radio button is checked.
if (tempC.Checked)
{
 collection.Add(c);
 }
 }
0
 
DhaestCommented:
You can find all the checked radiobuttons in one query


foreach (RadioButton radio in this.Controls.OfType<RadioButton>().Where( cb => cb.Checked == true))
            {
                ...
            }
0
 
Parth48Author Commented:
i can't get the radiobutton , what can i do ??

one thing is that i created radiobutton dynamically , so how can i find them ??

please refer the below code ...

//creating radio buttons

                    //Radio button 1
                    RadioButton rdbOption11a = new RadioButton();
                    rdbOption11a.Location = new Point(30, 65);
                    rdbOption11a.Font = new Font("Microsoft Sans Serif", 8, FontStyle.Bold, GraphicsUnit.Point);
                    //rdbOption11a.Text = char.ConvertFromUtf32(97 + i).ToString();
                    rdbOption11a.Text = "a";
                    rdbOption11a.Size = new Size(40, 24);

                    //Radio button 2
                    RadioButton rdbOption12a = new RadioButton();
                    rdbOption12a.Location = new Point(30, 95);
                    rdbOption12a.Font = new Font("Microsoft Sans Serif", 8, FontStyle.Bold, GraphicsUnit.Point);
                    //rdbOption11a.Text = char.ConvertFromUtf32(97 + i).ToString();
                    rdbOption12a.Text = "b";
                    rdbOption12a.Size = new Size(40, 24);

                    //Radio button 3
                    RadioButton rdbOption13a = new RadioButton();
                    rdbOption13a.Location = new Point(30, 125);
                    rdbOption13a.Font = new Font("Microsoft Sans Serif", 8, FontStyle.Bold, GraphicsUnit.Point);
                    //rdbOption11a.Text = char.ConvertFromUtf32(97 + i).ToString();
                    rdbOption13a.Text = "c";
                    rdbOption13a.Size = new Size(40, 24);

                    //Radio button 4
                    RadioButton rdbOption14a = new RadioButton();
                    rdbOption14a.Location = new Point(30, 155);
                    rdbOption14a.Font = new Font("Microsoft Sans Serif", 8, FontStyle.Bold, GraphicsUnit.Point);
                    //rdbOption11a.Text = char.ConvertFromUtf32(97 + i).ToString();
                    rdbOption14a.Text = "d";
                    rdbOption14a.Size = new Size(40, 24);

Open in new window


how can i find them ?
0
 
DhaestCommented:
Are the radiobuttons directly on your form or are they on a grouping-box (like a tabpage, ....)

If so, you need to use some kind of recursion

In code below, I just created a very small winapp, containing a tabpage with 2 radiobuttons (of which one was selected) and a radiobutton directly on the form.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Forms_C
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
// this will give a radioButtonList.Count() of 1
            var radioButtonList = this.Controls.OfType<RadioButton>().Where(cb => cb.Checked == true);
// this will give a radioButtonList.Count() of 2

            var radioButtonList2 = Generic.FlattenChildren(this).OfType<RadioButton>().Where(cb => cb.Checked == true);

        }


    }

    public static class Generic
    {
        public static IEnumerable<Control> FlattenChildren(this Control control)
        {
            var children = control.Controls.Cast<Control>();
            return children.SelectMany(c => FlattenChildren(c)).Concat(children);
        } 
    }

Open in new window

0
 
Sudhakar PulivarthiProject Lead - EngineeringCommented:
I think u missed adding the radio button to form control list add them
this.Controls.Add(rdbOption11a);
0
 
Sudhakar PulivarthiProject Lead - EngineeringCommented:
Like wise add this all radio buttons. As ur creating dynamically u need to add these controls to Control collection, then only u can retrieve it from it.
this.Controls.Add(rdbOption12a);
this.Controls.Add(rdbOption13a);
this.Controls.Add(rdbOption14a);
0
 
DhaestCommented:
@Sudhakar-Pulivarthi - he's doing that (I saw that in another question where he asked for mimizing the code with a loop-statement)
0
 
Parth48Author Commented:
i add them using the below line ..

panel.Controls.Add(lblnumber);
panel.Controls.Add(lblRandomQuestion11);
tabPage.Controls.Add(panel);

Open in new window


what can i do now ??
how can i find them ?
0
 
Parth48Author Commented:
one thing is that i add all the controls to the tab control ....
0
 
DhaestCommented:
See my posted code-example. Create a new class with the flattenControls-function and call that one

public static class Generic
    {
        public static IEnumerable<Control> FlattenChildren(this Control control)
        {
            var children = control.Controls.Cast<Control>();
            return children.SelectMany(c => FlattenChildren(c)).Concat(children);
        }
    }
0
 
Parth48Author Commented:
hi @Dhaest: yes u r right but how can i convert this result into string array ...

var radioButtonList2 = Generic.FlattenChildren(this).OfType<RadioButton>().Where(cb => cb.Checked == true);

Open in new window


above code give checked textbox but how can i convert this result into string array ??

for ex.

string[] correopt = new string[3];

correopt = ???

how can i convert ?
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.