我是编程新手,我正在尝试根据组合框中的选定值更改文本框的值,因为值是数字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个不同的数值,有更简单的方法吗?除了比较每个不同的值?
像循环一样。
答案 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;
}
}