Parse my winForm to store all textbox values into an array.

Hi, I have created a form with textbox and droplist. I have named them by group. Eg :

private System.Windows.Forms.TextBox p1_ctl00_CPPC_ctrlShipToAddress_txtName;
private System.Windows.Forms.TextBox p1_ctl00_CPPC_ctrlShipToAddress_txtDepartment;
private System.Windows.Forms.ComboBox p1_ctl00_CPPC_ctrlShipToAddress_ddlCountry;
...

Have you may notice, they all start by "p1_" because I have an other group that I have named "p2_" and so one, so I can individualy manage group fields.

What I need to do is to parse the whole form and store their name excluding the "p1_" in a Array[] because de name of the item refers to a specific name on a webApplication.

I am pretty new to C# and need assistance to figure this out.

Thanks,
maxlebAsked:
Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

x
 
UnifiedISConnect With a Mentor Commented:
Do you need this.Controls instead of Form1?

public void storeArray(string prefix){
           
           ArrayList p1 = new ArrayList();

           foreach (Control ctrl in this.Controls){
               if (ctrl.Name.Substring(0, 3) == "p1_")
               {
                   p1.Add(ctrl.Name.Replace("p1_",""));
               }
           }
0
 
UnifiedISCommented:
Use the controls collection

Can you translate from VB.NET?

For Each ctrl As Control In Me.Controls
            If TypeOf ctrl Is TextBox Then
                    'parse ctrl.name and add to array
            endif
Next
0
 
maxlebAuthor Commented:
public void storeArray(string prefix){
           
            ArrayList p1 = new ArrayList();

            foreach (Control ctrl in Form1){
                if (ctrl.Name.Substring(0, 3) == "p1_")
                {
                    p1.Add(ctrl.Name.Replace("p1_",""));
                }
            }


But in "Control ctrl in Form1" I don't have the .Controls and gives me an error.

Error    1    'PuroWS.Form1' is a 'type' but is used like a 'variable'  

Any ideas?


0
The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

 
Fernando SotoRetiredCommented:
Hi maxleb;

Here is a code snippet that should do what you want.

Fernando

private void button1_Click(object sender, EventArgs e)
{
    StoreControls("textBox");
}
 
private List<Control> controlList = new List<Control>();
 
public void StoreControls(string prefix)
{
    foreach (Control ctl in this.Controls)
    {
        if (ctl.Name.StartsWith(prefix))
        {
            controlList.Add(ctl);
        }
    }
}

Open in new window

0
 
Fernando SotoConnect With a Mentor RetiredCommented:
Hi maxleb;

Seeming you only want the name of the control without the prefix this should work.

        private List<String> controlList = new List<String>();

        public void StoreControls(string prefix)
        {
            foreach (Control ctl in this.Controls)
            {
                if (ctl.Name.StartsWith(prefix))
                {
                    controlList.Add(ctl.Name.Substring(prefix.Length));
                }
            }
        }

Fernando
0
 
maxlebAuthor Commented:
Ok, getting close,

Just a little issues.

I have added MessageBox.Show(ctl.Name); before the condition and it shows everything except TextBox and Droplist.. Shows only Button controls names and GroupBox controls name.

I have tried to change <Control> by <TextBox> and it is not working still

Sorry about my ignorance, is there a reason why?



        private List<Control> p1 = new List<Control>();
 
        public void StoreControls(string prefix)
        {
            foreach (Control ctl in this.Controls)
            {
                MessageBox.Show(ctl.Name);
                if (ctl.Name.StartsWith(prefix))
                {
                    p1.Add(ctl);
                }
            }
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            StoreControls("p1_");
        }

Open in new window

0
 
maxlebAuthor Commented:
Hi,

I have found the problem. Since all my fields where in a groupBox, it was excluded from the form itself.

I have added the group name and everything when great.
Thanks

this.grShipTo.Controlsthis.grShipTo.Controls
        private List<Control> p1 = new List<Control>();
 
        public void StoreControls(string prefix)
        {
            foreach (Control ctl in this.grShipTo.Controls)
            {
                MessageBox.Show(ctl.Name);
                if (ctl.Name.StartsWith(prefix))
                {
                    p1.Add(ctl);
                }
            }
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            StoreControls("p1_");
        }

Open in new window

0
All Courses

From novice to tech pro — start learning today.