使用字符串数组从多框列表中获取信息
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;
}
所以我有一个数组,其中包含订单表单上组合框的第一部分。组合框保存数据(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;
}