2013-05-27 26 views
0

假设我的表单中有10个文本框。他们被命名为textBox1, textBox2 etc.我希望能够选择我想编辑的文本框 - 例如我有一个comboBox with numers 1-10,如果我选择,比如说"5",那么文本框5的文本正在改变(在另外一个类型中,第十一,文本框)。选择要从GUI(WinForms)编辑的文本框

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

+0

通过“图形用户界面”中没有的项目,你的意思是Visual Studio的表格编辑器? –

+0

不,我的意思是正在运行的应用程序。 –

+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。

所有控件(组合框,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什么代码确实

+0

@ user2382010这是否符合您的要求? –

+0

谢谢你,这正是我需要的!现在我需要了解它是如何工作:) –

+0

@ user2382010我会为你分解 - 看我在一分钟内编辑 –