选择要从GUI编辑的文本框(WinForms)

时间:2013-05-27 17:40:28

标签: c# combobox textbox

假设我的表单中有10个文本框。它们被命名为textBox1, textBox2 etc.我希望能够选择我想要编辑的文本框 - 例如我有一个comboBox with numers 1-10,如果我选择,请说"5",然后正在更改textBox5的文本(例如,在另外一个,第十一个,textBox中输入)。

我知道这听起来很奇怪,但我需要学习如何选择控件并从GUI编辑它们。

1 个答案:

答案 0 :(得分:0)

您应该使用组合框(我的代码中为cmbSelectedIndexChanged

 private void cmb_SelectedIndexChanged(object sender, EventArgs e)
 {  
    var numberFromComboBox = cmb.Text;
    var txtBoxToEdit = Controls.OfType<TextBox>()
                               .Where(c => c.Name.EndsWith(numberFromComboBox))
                               .FirstOrDefault();

    if(txtBoxToEdit != null)
    {
      txtBoxToEdit.Text = "was selected";
    }
}

<强>更新
要理解代码的作用,需要了解一点Linq。

所有控件(ComboBox,DataGridViews,TextBoxes等)都存储在Controls集合中。

但我们只想要直接在表单上的TextBoxe:

List<TextBox> listOfTxtBox = Controls.OfType<TextBox>();

listOfTextBox现在包含所有文本框。但是我们只需要一个与我们在组合框中选择的数字相匹配的一个(cmb)。

为此,我们使用Where方法“过滤”我们的文本框集合 在我的表达式中,它以 - c => c.Name.EndsWith(numberFromComboBox)开头,给出了所有具有名称(TextBox.Name)的文本框,该文本框以我们的ComboBox中的数字结尾。

最后一部分是FirstOrDefault(),它只是在我们(现在已过滤)的集合中使用第一个项。如果集合中没有项目(无论出于何种原因),FirstOrDefault将返回null

希望这有助于清除代码所做的事情