Search code examples
c#arrayswinformscomboboxtextbox

Array of WinForm Elements


So I do have a WinForm in my Programm, which contains a series of each a ComboBox and two TextBoxs. There are atm 8 Lines, but this will increase to a total of at least 32, therefore I would like to work with an Array or similar. How do I do that?

My current working, method is that a create a new array of TextBoxes/ComboBoxes which I assign the designated Elemt of the WinForm, manually. Therefore I have a list like this:

tbGU[0] = tbGU1;
tbGO[0] = tbGO1;
cbS[0] = cbS1;

Of course, this looks awful and isn't great if it's copied many times. Anyone got a Solution to my Problem?

I need to access the SelectedIndex of the ComboBox and the Text of the TextBoxes. I was hoping that I could avoid having to create all the Elements manually by code.


Solution

  • One simple solution is to use the array initializer syntax:

    ComboBox[] cbS = new[] { cbS1, cbS2, cbS3 ... };
    

    Another way of doing this would be to get rid of the variables cbS1, cbS2 ... cBSn altogether and create the controls in a for loop.

    ComboxBox[] cbS = new ComboBox[32];
    // declare the text box arrays here as well
    for (int i = 0 ; i < cbS.Length ; i++) {
        cbS[i] = new ComboBox();
        cbS[i].Location = ... // use "i" to help you position the control
        // configure your combo box ...
        this.Controls.Add(cbS[i]);
    
        // do the same for the text boxes.
    }
    

    A third way is to create a custom control:

    // name this properly!
    public class MyControl: UserControl {
        public ComboBox CbS { get; }
        public TextBox TbGU { get; }
        public TextBox TbGO { get; }
    
        public MyControl() {
            // create and configure the combo box and text boxes here ...
        }
    }
    

    Then you can use a for loop to create lots of MyControls.