使用列表框的foreach上的奇怪问题

时间:2013-01-17 19:45:04

标签: c# winforms combobox listbox

我正在尝试从列表框元素中填充组合框。

这是代码:

foreach(string elements in (Application.OpenForms[1] as Impostazioni).listBox1)
        {
            cbxValuta.Items.Add(elements);
        }

但我从Visual Studio 2012中收到此错误:

  

错误1 foreach语句无法对类型变量进行操作   'System.Windows.Forms.ListBox'因为'System.Windows.Forms.ListBox'   不包含'GetEnumerator'

的公共定义

我不知道如何解决这个错误。

4 个答案:

答案 0 :(得分:5)

如果要迭代ListBox元素,则必须使用Items属性。

试试这个:

foreach(string elements in (Application.OpenForms[1] as Impostazioni).listBox1.Items)
{
    cbxValuta.Items.Add(elements);
}

错误:

  

但是现在我收到了这个错误:索引超出了范围。必须是非负面的   并且小于集合的大小。参数名称:index

首先,您必须检查Application.OpenForms是否为空且不为空。

因此,在foreach之前,您必须添加以下代码行:

如果Application.OpenForms是列表:

if(Application.OpenForms != null && Application.OpenForms.Count != 0)

如果Application.OpenForms是数组:

if(Application.OpenForms != null && Application.OpenForms.Length != 0)

答案 1 :(得分:1)

检查listBox1是否具有可以枚举的.Items属性。

答案 2 :(得分:0)

如果您想在代码中使用foreach,那么您的类应该实现IEnumerableIEnumerable<T>接口。

尝试使用.Items属性。等;

(Application.OpenForms[1] as Impostazioni).listBox1.Items

答案 3 :(得分:0)

您需要从listbox1获取“Items”集合,而不是使用整个列表框。

foreach(string elements in (Application.OpenForms[1] as Impostazioni).listBox1.Items)
    {
        cbxValuta.Items.Add(elements);
    }