Использование строкового массива для получения информации из списка мультибокс - PullRequest
0 голосов
/ 30 апреля 2019

Итак, у меня есть массив, в котором первая часть списков в форме заказа.комбинированные списки содержат данные (x1, x2, x3, x4) и называются ketchupCount, mustardCount и т. д.

Я пытаюсь использовать массив normalCondoments array + Count для создания правильного комбинированного спискаимя, чтобы установить значение SelectedIndex в -1, который не выбран.В конце концов он получит значение, а не установит его, и напечатает его в виде строки ...

Ожидаемый код должен прочитать ketchupCount.SelectedIndex

    string[] normalCondoments = { "ketchup", "mustard", "mayo", "ga",
                                  "lettuce", "tomato", "pickles", "onion" };
    foreach (var nCondoment in normalCondoments)
                {
                    string str = nCondoment + "Count";
                    MessageBox.Show("letter:" + nCondoment);
                    str.SelectedIndex = -1;
                }

Ошибка, которую я получаю:

"Строка не содержит выбранного определения для« SelectedIndex », и доступного расширения для« SelectedIndex », принимающего первый аргумент типа« строка », не найдено."

VS не даетисправить это, я посмотрел и посмотрел, но не нашел что-то похожее на эту ошибку.Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019

Вы можете получить ссылку на элемент управления, используя коллекцию Container.Controls [] .
Эта коллекция может быть проиндексирована значением Int32 или String, представляющим имя элемента управления.

В вашем случае, если все поля со списками являются прямыми дочерними элементами формы, ваш код может быть:

string[] normalCondoments = { "ketchup", "mustard", "mayo", "ga",
                              "lettuce", "tomato", "pickles", "onion" };

foreach (var nCondoment in normalCondoments) {
    (this.Controls[$"{nCondoment}Count"] as ComboBox).SelectedIndex = -1;
}

В противном случае замените this на фактический контейнер.

Если вместо этого эти элементы управления являются дочерними элементами для разных контейнеров, вам нужно их найти.
В этом случае используйте метод Find () коллекции Controls, указав searchAllChildren:

foreach (var nCondoment in normalCondoments) {
    var cbo = (this.Controls.Find($"{nCondoment}Count", true).FirstOrDefault() as ComboBox);
    if (cbo != null) cbo.SelectedIndex = -1;
}
0 голосов
/ 30 апреля 2019

Это не javascript, вы должны использовать переменную, а не ее имя

ketchupCount.SelectedIndex = -1;
mustardCount.SelectedIndex = -1;
mayoCount.SelectedIndex = -1;
gaCount.SelectedIndex = -1;
lettuceCount.SelectedIndex = -1;
tomatoCount.SelectedIndex = -1;
picklesCount.SelectedIndex = -1;
onionCount.SelectedIndex = -1;

Или создайте массив для их хранения

var normalCondoments = new multibox[] {ketchupCount, mustardCount, mayoCount, gaCount,
     lettuceCount, tomatoCount, picklesCount, onionCount};
foreach(var nCondoment in normalCondoments)
  nCondoment.SelectedIndex = -1;
...