如何将数组值添加到组合框中?

时间:2013-08-31 00:39:17

标签: c# arrays combobox

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

6 个答案:

答案 0 :(得分:8)

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

form.comboBox1.Items.AddRange(type);

答案 1 :(得分:2)

如果您想超越一个数组,可以使用以下空格。

public void AddToCombo(Array array, ComboBox c)
{
  foreach(var a in array)
  {
    c.Items.Add(a);
  }
}

答案 2 :(得分:1)

您不应该在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传递给{{1}上的方法,让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()

答案 3 :(得分:0)

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

    foreach(var type in type[])
    {
        form.comboBox1.Items.Add(type);
    }

答案 4 :(得分: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"
        };
    }

答案 5 :(得分:0)

这很简单:

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

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