当ComboBox值更改时,我应该如何更改TextBox的可见性?

时间:2015-03-12 22:51:43

标签: c# winforms combobox textbox

我是编程新手,我正在尝试根据组合框中的选定值更改文本框的值,因为值是数字1到20,并且根据选择它将是数字文本框可见。我正在使用事件选择索引更改。

这是我的代码:

private void cbxPIN_SelectedIndexChanged(object sender, EventArgs e)
{
    int pines = Convert.ToInt32(cbxPIN.SelectedItem.ToString());
    if (pines == 1)
    {
        textbox1.visible = true;
    }
    else if (pines == 2)
    {
        textbox1.visible = true;
        textbox2.visible = true;
    }
 ...

    else if (pines == n)
    {
        textbox1.visible = true;
        textbox2.visible = true;
 ...
        textboxn.visible = true;
    }
}

因为组合框中有25个不同的数值,有更简单的方法吗?除了比较每个不同的值?

像循环一样。

2 个答案:

答案 0 :(得分:0)

至少,我会像这样重写它,以减少重复:

private void cbxPIN_SelectedIndexChanged(object sender, EventArgs e)
{
    int pines = Convert.ToInt32(cbxPIN.SelectedItem.ToString());

    if (pines >= 1)
        textbox1.Visible = true;

    if (pines >= 2)
        textbox2.Visible = true;

    ...

    if (pines >= n)
        textboxn.Visible = true;
}

实际上,我会将所有TextBox控件添加到集合中,可能在构造函数中:

List<TextBox> TextBoxes = new List<TextBox> { textbox1, textbox2, ... textboxn };

然后使用LINQ的Take()方法获取第一个 xx 数量的控件并迭代它们:

foreach (var tb in TextBoxes.Take(pines))
    textBox.Show();

答案 1 :(得分:0)

您想要使用循环结构。您应该验证要执行的循环数是否> 0和&lt;您可以使用的文本框数量,但我会给您留下错误处理。

private void cbxPIN_SelectedIndexChanged(object sender, EventArgs e)
{
    int pines = Convert.ToInt32(cbxPIN.SelectedItem.ToString());
    TextBox textBox;
    for (int i = 1; i <= pines; i++)
    {
        // get the control from the form's controls collection by the control name
        textBox = this.Controls["textbox" + pines.ToString()] As TextBox
        textBox.Visible = true;
    }
}