使用字符串数组从多框列表中获取信息

Using a string array to get information from a list of multiboxes

所以我有一个数组,其中包含订单表单上组合框的第一部分。组合框保存数据(x1、x2、x3、x4),并命名为 ketchupCount、mustardCount 等...

我想做的是使用数组 normalCondoments 数组 + 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;
                }

我得到的错误是:

"String does not contain a selected definition for 'SelectedIndex' and no accessable extension for 'SelectedIndex' accepting a first argument of type 'string' ncould be found."

VS 没有对此给出修复,我看了又看,但还没有发现类似这个错误的东西。提前致谢

这不是 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;

您可以使用 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 替换为实际容器。

如果这些控件是不同容器的子控件,则您需要找到它们。
在这种情况下,使用 Controls 集合的 Find() 方法,指定为 searchAllChildren

foreach (var nCondoment in normalCondoments) {
    var cbo = (this.Controls.Find($"{nCondoment}Count", true).FirstOrDefault() as ComboBox);
    if (cbo != null) cbo.SelectedIndex = -1;
}