2013-05-27 80 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我會爲你分解 - 看我在一分鐘內編輯 –