假设我的表单中有10个文本框。它们被命名为textBox1, textBox2 etc.
我希望能够选择我想要编辑的文本框 - 例如我有一个comboBox with numers 1-10
,如果我选择,请说"5"
,然后正在更改textBox5的文本(例如,在另外一个,第十一个,textBox中输入)。
我知道这听起来很奇怪,但我需要学习如何选择控件并从GUI编辑它们。
答案 0 :(得分: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。
所有控件(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
希望这有助于清除代码所做的事情