2

我已将变量定义为string数组。我还有一个名为的表单form4,在这个表单上我有 1 个文本框和 1 个组合框。

我在一个类中有这个代码:

public class food
{
    public string[] name1 = new string [20];
    public string[] name2 = new string [50];
    public string[] name3 = new string [40] ;
    public string[] name = new string [20];
    public string[] type = new string [15];
    //private const int total = 11;
    public int[] calories_ref;
    public int i, i2;
    public Form4 form = new Form4();


    public food(string[] Name1, string[] Name, string[] Type1, int[] kcal)
    {
        name1 = Name1;
        name = Name;
        type = Type1;
        calories_ref = kcal;
    }
    public food()
    {

    }
    private void settypes()
    {

        type[0] = "Bebidas não alcoólicas";
        type[1] = "Bebidas Alcóolicas";
        type[2] = "Fruta";
        type[3] = "Hidratos de Carbono";
        type[4] = "Peixe";
        type[5] = "Carne";
        type[6] = "Cereais";
        type[7] = "Lacticínios";
        type[8] = "Óleos/Gorduras";
        type[9] = "Leguminosas";
        type[10] = "Legumes";

        for (int i = 0; i < type.Length; i++)
        {
            form.comboBox1.Items.Add(type[i]);
        }
    }

settypes()方法中,我定义了各种类型的食物,更具体地说是食物轮。我怎样才能将这些值用作组合框中的项目form4

4

6 回答 6

10

AddRange(array[])您可以使用from方法添加字符串数组comboBox

form.comboBox1.Items.AddRange(type);
于 2014-05-23T18:17:13.040 回答
2

如果您想超越一个数组,可以使用这里的空白。

public void AddToCombo(Array array, ComboBox c)
{
  foreach(var a in array)
  {
    c.Items.Add(a);
  }
}
于 2013-08-31T00:45:26.433 回答
1

你不应该在你的类中存储一个Form4对象。每次创建对象时,food您的代码都会创建一个全新的代码。如行中所示:Form4food

public Form4 form = new Form4();

这实际上不会显示在屏幕上,因为您对表单没有任何其他操作,除了将项目添加到 中ComboBox,这也不会显示在屏幕上。

即使您将其显示在屏幕上,您仍然会收到类似于以下内容的错误:

Form4.comboBox1 is inaccessible due to its protection level

这是因为ComboBox是在内部使用私有访问修饰符创建的。(有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms173121.aspx )。

您需要做的是让您现有Form4的对象通过将 传递给类似于此示例的对象上的方法food来填充它(在您的代码中而不是您的代码中):ComboBoxComboBoxfoodForm4food

private void Form4_Load(object sender, EventArgs e)
{
    food f = new food(); //or however you wanted to create the object
    f.AddTypesToComboBox(this.comboBox1);
}

AddTypesToComboBox方法将在您的food对象中定义如下:

public void AddTypesToComboBox(ComboBox box)
{
    for (int i = 0; i < type.Length; i++)
    {
        box.Items.Add(type[i]);
    }
}

此外,目前该函数实际上不会向 中添加任何内容,ComboBox因为您的type数组没有填充数据。您需要像这样调用对象settypes();food构造函数:

public food(string[] Name1, string[] Name, string[] Type1, int[] kcal)
{
    settypes();
    name1 = Name1;
    name = Name;
    type = Type1;
    calories_ref = kcal;
}
public food()
{
    settypes();
}

您将需要public Form4 form = new Form4();从变量声明部分中删除,并从您的settypes()方法中删除以下内容:

for (int i = 0; i < type.Length; i++)
{
    form.comboBox1.Items.Add(type[i]);
}

settypes()应该只将数据填充到数组中,而不是尝试将其添加到ComboBox.

于 2013-08-31T01:28:27.633 回答
0

如果您希望项目位于 ComboBox 中,只需将数组设置为其数据源。您无需遍历数组并一项一项添加项目。它的代码比这里的其他解决方案少得多。

    public void SetTypes()
    {
        comboBox1.DataSource = new[]{
            "Bebidas não alcoólicas",
            "Bebidas Alcóolicas",
            "Fruta",
            "Hidratos de Carbono",
            "Peixe",
            "Carne",
            "Cereais",
            "Lacticínios",
            "Óleos/Gorduras",
            "Leguminosas",
            "Legumes"
        };
    }
于 2013-08-31T02:35:20.440 回答
0

目前不在我的电脑上,但应该这样做:

    foreach(var type in type[])
    {
        form.comboBox1.Items.Add(type);
    }
于 2013-08-31T00:43:04.430 回答
0

就这么简单:

public void yourMethodName() {        
    yourComboBoxName.removeAllItems();
    for (YourObjectName object: yourArrayListName) {
        yourComboBoxName.addItem(object.getWhatYouWanaGet());
    }        
}

您从列表中删除实际项目而不是添加要添加的项目:)

于 2016-04-01T19:02:25.513 回答