0

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

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

4

1 回答 1

0

您应该使用组合框(cmb在我的代码中)SelectedIndexChanged

 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。

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

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

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

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

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

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

希望这有助于清除代码的作用

于 2013-05-27T17:53:05.150 回答