假设我的表单中有10个文本框。他们被命名为textBox1, textBox2 etc.
我希望能够选择我想编辑的文本框 - 例如我有一个comboBox with numers 1-10
,如果我选择,比如说"5"
,那么文本框5的文本正在改变(在另外一个类型中,第十一,文本框)。选择要从GUI(WinForms)编辑的文本框
我知道这听起来很奇怪,但我需要学习如何从GUI中选择控件并对其进行编辑。
假设我的表单中有10个文本框。他们被命名为textBox1, textBox2 etc.
我希望能够选择我想编辑的文本框 - 例如我有一个comboBox with numers 1-10
,如果我选择,比如说"5"
,那么文本框5的文本正在改变(在另外一个类型中,第十一,文本框)。选择要从GUI(WinForms)编辑的文本框
我知道这听起来很奇怪,但我需要学习如何从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。
所有控件(组合框,DataGridViews,文本框等)都存储在Controls
集合中。
但我们只希望TextBoxe的就是直接在表格上:
List<TextBox> listOfTxtBox = Controls.OfType<TextBox>();
这listOfTextBox
现在包含所有文本框。但我们只需要一个与我们在组合框中选择的编号相匹配的编号(cmb
)。
为此,我们使用Where
方法“过滤”我们的文本框集合。
在我的表达式中,以 - c => c.Name.EndsWith(numberFromComboBox)
开头的所有文本框都有一个名称(TextBox.Name
),它以我们的ComboBox中的数字结尾。
最后一部分是FirstOrDefault()
,它只需要第一个项目在我们的(现在filteredred)集合。如果在集合(无论何种原因)FirstOrDefault
将返回null
希望,这有助于clearfi什么代码确实
@ user2382010这是否符合您的要求? –
谢谢你,这正是我需要的!现在我需要了解它是如何工作:) –
@ user2382010我会为你分解 - 看我在一分钟内编辑 –
通过“图形用户界面”中没有的项目,你的意思是Visual Studio的表格编辑器? –
不,我的意思是正在运行的应用程序。 –
显示你已经尝试过:) –