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

3

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

7个回答

11

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

form.comboBox1.Items.AddRange(type);

2

如果您想超出一个数组的范围,可以使用以下空白函数。

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

那是一个foreach循环,与for循环非常不同。另外,将其放在自己的方法中有什么意义? - Patrick Geyer
抱歉,我跑题了哈哈。 总之,我觉得如果他想添加其他数组,这个可以对他有所帮助。 - ismellike
我觉得你打算在添加新项目之前清除现有项目,对吗? - Mathieu Guindon
我猜你可以这样做,但它不会是适用于任何comboBox的void。 - ismellike
void 只是返回类型,它实际上是一个 方法 - Mathieu Guindon

1
您不应该在 food 类中存储一个 Form4 对象。您当前的代码每次创建 food 对象时都会创建一个全新的 Form4。这可以在以下行中看到:
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通过将ComboBox传递给food对象上的一个方法来请求其填充ComboBox,类似于此示例(在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);
}

"

在您的food对象中,AddTypesToComboBox方法将被定义为:

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

此外,目前该函数实际上不会向ComboBox中添加任何内容,因为您的type数组未填充数据。您需要在food对象的构造函数中调用settypes();,如下所示:
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 中。

form.comboBox1.Items.AddRange(type); - Ali Ahmadvand

1
如果您希望项目在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"
        };
    }

0

就这么简单:

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

你需要从列表中移除实际项目,然后再添加想要添加的项目 :)


0

如果这是 Class1 中的一个数组:

public static string[] session = new string[] { "2023-2024", "2022-2023","2021-2022" };

C#中(Windows Forms):

comboBox1.Items.Clear();
comboBox1.Items.AddRange(Class1.session);

0

目前不在我的电脑旁边,但这应该可以解决:

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

我明天会尝试...谢谢。 - Vitor Ferreira
@VitorFerreira - 好的,希望一切顺利。在此期间,您是否介意给这个答案点个赞? - Patrick Geyer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接