假設我的表單中有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的表格編輯器? –
不,我的意思是正在運行的應用程序。 –
顯示你已經嘗試過:) –