我已将变量定义为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
中的组合框中的项目?
答案 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());
}
}
从列表中删除实际项目,而不是添加要添加的项目:)