假设我的表单中有 10 个文本框。它们被命名textBox1, textBox2 etc.
并且我希望能够选择我想要编辑的文本框 - 例如,我有一个comboBox with numers 1-10
,如果我选择,假设"5"
,那么 textBox5 的文本正在更改(输入额外的第十一个,例如文本框)。
我知道这听起来很奇怪,但我需要学习如何选择控件并从 GUI 编辑它们。
您应该使用组合框(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
希望这有助于清除代码的作用