如何基于数组列表创建动态按钮

本文关键字:动态 按钮 创建 列表 何基于 数组 | 更新日期: 2023-09-27 18:02:08

我在创建foreach循环时遇到了一些麻烦,该循环基于NamesDA类内部的List动态创建按钮。

我得到的错误,如:不能转换类型'Program1。名称'到'int'。我已经尝试了我所知道的来修复转换错误,但我不知道正确的方法来做它。

Edit 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]);
}

如何基于数组列表创建动态按钮

从更新中可以清楚地看到,allNamesList<Names>,其中Names是一个包含两个属性/字段的类,一个是int类型(让它是_id),另一个是字符串类型(让它是_name)。因此,您必须像下面这样重新创建循环:

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

int nextLeft=30;
foreach (Names name in allNames) 
{
    Button tempButton = new Button();    
    tempButton.Name = name._id;
    tempButton.Text = name._name;
    tempButton.Location = new System.Drawing.Point(name.positionX + nextLeft,name.positionY);
    listView.Controls.Add(tempButton);
    nextLeft+=30;
}