我已将变量定义为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组合框中的项目?

最佳答案

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

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对象上与该示例类似的方法(在您的ComboBox中),使现有的ComboBox要求food对象填充其Form4。代码而不是您的food代码):

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中。

10-04 10:17