如何基于数组列表创建动态按钮
本文关键字:动态 按钮 创建 列表 何基于 数组 | 更新日期: 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]);
}
从更新中可以清楚地看到,allNames
是List<Names>
,其中Names
是一个包含两个属性/字段的类,一个是int类型(让它是_id
),另一个是字符串类型(让它是_name
)。因此,您必须像下面这样重新创建循环:
更新:你也可以设置按钮的位置,如果你需要,你必须在类中定义两个整数属性(让它是int positionX=10
和int 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;
}