Лучший способ найти объект?
У меня есть форма с 7 кнопками и 7 комбо-боксами. Когда я нажимаю одну из кнопок, я хочу поместить текст в соответствующий combobox, поэтому кнопка № 4 помещает текст в combobox4.
Достаточно просто, однако, я не хочу повторять свой код, я хочу, чтобы все это было в одном блоке, поэтому один кусок обрабатывает все.
Я использую FindControl, как мы уже много раз писали здесь и в других местах, и он работает, но вы можете видеть из моего оператора switch, что я все еще повторяю код. Я хочу, чтобы грызть, что переключение вниз на одну запись.
Я создал функцию под названием AddText, для ее работы требуется строка и объект. Затем я могу сделать цикл for, чтобы передать его, но не знаю, как получить компонент для объекта combobox, чтобы отправить его. В операторе switch я просто помещаю туда имя, и бэкэнд знает, какой объект мне нужен, Но как это сделать в цикле?
Что я уже пробовал:
namespace LotsButtons { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Button aButton = (Button)sender; string lastchar = aButton.Text.Substring(aButton.Text.Length - 1); ComboBox cbFound; string cbName = "comboBox" + lastchar; switch (lastchar) { case "1": cbFound = (ComboBox)FindControl(cbName, comboBox1); if (cbFound != null) cbFound.Text = "Yay"; break; case "2": cbFound = (ComboBox)FindControl(cbName, comboBox2); if (cbFound != null) cbFound.Text = "Yay"; break; case "3": cbFound = (ComboBox)FindControl(cbName, comboBox3); if (cbFound != null) cbFound.Text = "Yay"; break; case "4": cbFound = (ComboBox)FindControl(cbName, comboBox4); if (cbFound != null) cbFound.Text = "Yay"; break; case "5": cbFound = (ComboBox)FindControl(cbName, comboBox5); if (cbFound != null) cbFound.Text = "Yay"; break; case "6": cbFound = (ComboBox)FindControl(cbName, comboBox6); if (cbFound != null) cbFound.Text = "Yay"; break; case "7": cbFound = (ComboBox)FindControl(cbName, comboBox7); if (cbFound != null) cbFound.Text = "Yay"; break; } //Attempt to crunch this down to one function call, how to get component name (combobox1) from string ("combobox1")? for (int cnt = 1; cnt < 8; cnt++) { AddText(lastchar, (ComboBox)cbName); } } private void AddText(string cbName, ComboBox cbToFind) { ComboBox cbFound = (ComboBox)FindControl(cbName, cbToFind); if (cbFound != null) cbFound.Text = "Yay"; } public static Control FindControl(string controlId, Control container) { if (container.Name == controlId) return container; foreach (Control control in container.Controls) { Control c = FindControl(controlId, control); if (c != null) return c; } return null; } } }