WinForm元素数组

时间:2018-07-06 08:49:08

标签: c# arrays winforms combobox textbox

所以我的程序中确实有一个WinForm,其中包含一系列每个ComboBox和两个TextBox。有atm 8行,但这将增加到至少32行,因此我想使用Array或类似的设备。我该怎么办?

我当前的工作方法是创建一个新的TextBoxes / ComboBoxes数组,我手动为其分配WinForm的指定Elemt。因此,我有一个这样的列表:

<div class="image" style="height: 300px;width:300px;" [ngStyle]="{'background': ' url(' + imageUrl  + ') no-repeat 0 0'}"></div>

当然,这看起来很糟糕,而且如果被多次复制,效果也不佳。任何人都可以解决我的问题吗?

我需要访问ComboBox的SelectedIndex和TextBoxes的文本。 我希望可以避免通过代码手动创建所有Elements。

1 个答案:

答案 0 :(得分:1)

一种简单的解决方案是使用数组初始化程序语法:

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

执行此操作的另一种方法是完全删除变量cbS1cbS2 ... cBSn,并在for循环中创建控件。

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.
}

第三种方法是创建自定义控件:

// 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 ...
    }
}

然后,您可以使用for循环创建许多MyControl