我需要获取表单的许多SelectedIndex
个实例的ComboBox
。我试过了:
internal static void getComboSelectedIndex(Control control)
{
foreach (Control c in control.Controls)
{
getComboSelectedIndex(c);
if (c is ComboBox)
{
int i = ((ComboBox)c).SelectedIndex;
}
}
}
并使用以下代码调用此方法:getComboSelectedIndex(this);
但它不起作用。对于表单中的每个comboBox
,它返回Always -1。
感谢您的帮助!
答案 0 :(得分:1)
在WindowsForm第一次迭代后没有递归,循环退出。使用递归,foreach循环在每个组合框之间迭代,但为每个组合框返回selectedindex = -1。
我从另一个问题复制的方法:
public IEnumerable<Control> GetAll(Control control,Type type)
{ var controls = control.Controls.Cast();
return controls.SelectMany(ctrl => GetAll(ctrl,type))
.Concat(controls)
.Where(c => c.GetType() == type);
}
效果很好,但它只返回windowsForm组合框的编号,但我无法更改它以返回selectedIndexes,因为我不知道linq控件。
答案 1 :(得分:1)
您可以使用以下代码:
internal static void getComboSelectedIndex(Control control)
{
List<ComboBox> comboBoxes = new List<ComboBox>();
foreach (Control c in control.Controls)
{
getComboSelectedIndex(c);
if (c is ComboBox)
{
ComboBox curretComboBox = ((ComboBox)c);
if (curretComboBox.SelectedIndex > -1) // should be greater than -1 not 0 because first index of comboboxes is 0 not 1
comboBoxes.Add(curretComboBox);
}
}
var orderedList = comboBoxes.OrderBy(item => item.TabIndex).ToList();
for (int i = 0; i < orderedList.Count; i++)
{
ComboBox _current = orderedList[i];
MessageBox.Show("selected index of " + _current.Name + " is " + _current.SelectedIndex.ToString() + " / TabIndex: " + _current.TabIndex);
}
}
答案 2 :(得分:0)
为什么在foreach循环中使用递归函数?
以下代码应返回当前形式的所有组合框的选定索引:
internal static void getComboSelectedIndex(Control control)
{
foreach (Control c in control.Controls)
{
if (c is ComboBox)
{
int i = ((ComboBox)c).SelectedIndex;
MessageBox.Show("selected index of "+ c.name + " is "+ i.ToString());
}
}
}
答案 3 :(得分:0)
好的,谢谢AGB,你是对的,我修改了我的方法:
internal static void getComboSelectedIndex(Control control)
{
foreach (Control c in control.Controls)
{
getComboSelectedIndex(c);
if (c is ComboBox)
{
int i = ((ComboBox)c).SelectedIndex;
if (i > 0) MessageBox.Show("selected index of " + c.Name + " is " + i.ToString());
}
}
}
现在它有效。我不知道-1表示组合框与&#34;未选择项目&#34;。现在我还有一个小问题:是否有可能在其TabIndex之后顺序获得组合框的selectedIndex?