如何基于arraylist创建动态按钮

时间:2016-08-12 00:52:24

标签: c# loops arraylist foreach

我在创建foreach循环时遇到问题,该循环根据NamesDA类中的List动态创建按钮。

我收到的错误如下:无法转换类型' Program1.Names' to' int'。我已经尝试了所有我知道的修复转换错误,但我不知道正确的方法。

编辑1: allNames是NamesDA中读取csv文件的数组列表。 它返回一个字符串和int的列表,然后它们将用于创建按钮并表示它们。

编辑2:现在解决了foreach循环问题,但是我无法获取按钮文本的列[0]和按钮标记的列[1]的值。

NamesDA类:

private const string path = "names.csv";
public static List<Names> GetNames()
{
   StreamReader textIn = new StreamReader(new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read));
   List<Names> allNames = new List<Names>();
   while (textIn.Peek() != -1)
   {
       string row = textIn.ReadLine();
       string[] columns = row.Split(',');
       allNames.Add(new Names(columns[0].ToString(), Convert.ToInt16(columns[1])));
   }

   textIn.Close();
   return allNames;
}   

表格:

int startTop = 20;
int startLeft = 17;

allNames = NamesDA.GetNames(); //calling the method in the NamesDA class
foreach (int x in allNames) {
    names[x] = new Button();
    tempButton.Text = ""; //based on the list column[0]
    tempButton.Tag = "";  //based on the list column[1]
    names[x].Location = new System.Drawing.Point(startTop + (x * 95), startLeft);    
    listView.Controls.Add(names[x]);
}

1 个答案:

答案 0 :(得分:1)

从更新中可以清楚地看出allNamesList<Names>,其中Names是一个类包含两个属性/字段,一个是int类型(让它为{{1}另一个是string类型(让它为_id)。所以你必须重新创建循环,如下所示:

更新:您也可以设置按钮位置,如果需要,您必须在类中定义两个整数属性(让它为_nameint positionX=10)现在看一下更新的代码:

int PositionY=30