#c# #winforms
#c# #winforms
Вопрос:
Допустим, у меня есть 30 элементов управления, все lbl, все называются «lblA» с числом после.
У меня также есть 30 текстовых полей, одно и то же — под названием «txtB» с цифрой после.
Как именно я бы это отформатировал.
for (i = 1; i < this.controls.count;i )
{
if ("lblA" i=null)
{
break;
}
string A = string A ("lblA" i).Text
string B = string B ("txtB" i).Text
}
Я пробовал несколько разных вещей, таких как вызов объекта с помощью this.controls[i], но это не совсем то, что я хочу. Что я делаю, так это то, что у меня есть много меток и текстовых полей в форме, которые добавляются во время выполнения. Мне нужно выполнить цикл по форме, чтобы получить их все. Я записываю это как a для каждого с довольно большим количеством «если», но мне любопытно, есть ли динамический способ сделать это.
Я искал в Интернете около 1-1: 30 часов и не нашел ничего похожего на, спасибо всем за помощь.
Комментарии:
1. Этот вопрос о ASP.NET ?
2. Это просто программа Windows form C #.
Ответ №1:
var labels = new Dictionary<int, string>();
for (i = 1; i < this.controls.count;i )
{
var label = FindControl("lblA" i) as Label;
if (label == null)
{
break;
}
labels.Add(i, label.Text);
}
Ответ №2:
То, что вы хотите использовать, — это метод FindControl.
Пример в VB:
Dim txtMileage As TextBox = CType(cphLeft.FindControl("txtMileage" amp; iControlCountDays.ToString()), TextBox)
Ответ №3:
Возможно, это решит то, что вам нужно:
void GetSpecialControls() {
const string TXT_B = "txtB";
const string LBL_A = "lblA";
List<TextBox> textBoxList = new List<TextBox>();
List<Label> labelList = new List<Label>();
foreach (Control ctrl in this.Controls) {
Label lbl = ctrl as Label;
if (lbl != null) {
if (lbl.Text.IndexOf(LBL_A) == 0) {
labelList.Add(lbl);
}
} else {
TextBox txt = ctrl as TextBox;
if (txt != null) {
if (txt.Text.IndexOf(TXT_B) == 0) {
textBoxList.Add(txt);
}
}
}
}
Console.WriteLine("Found {0} TextBox Controls.", textBoxList.Count);
Console.WriteLine("Found {0} Label Controls.", labelList.Count);
}