对此不屑一顾 - 通过许多不同的文章,论坛和问题,但仍然无法解决这个问题。
我是编程菜鸟,我目前正在使用IronPython来创建Windows窗体应用程序。 Visual Studio 2015是我的IDE。
我想从一个已从CSV加载的数组在主窗体上创建100多个标签元素。数组工作正常,代码就在这里:
with open('sites.csv', 'rb') as f:
reader = csv.reader(f)
for row in reader:
sites.append(row[0])
数组如下所示: Sitename 1,Sitename 2,Sitename 3,Sitename 4等。
在我的" MyForm"在显示表单之前我创建子控件的类我有一个循环来遍历这个数组并为列表中的每个sitename条目创建一个标签。
#Create Label for each Site
for s in sites:
sitename = str(s) #Convert Name into a String
elementname = sitename.replace(" ","") + "Label"
elementname = Label()
elementname.Name = str(elementname)
elementname.Parent = self
elementname.Location = Point(lastx,lasty)
counter = counter + counter
lasty = lasty + 10
变量sitename
会将列表中的当前站点名称条目转换为带有任何空格的字符串值(例如Northern Site)。
变量elementname
获取sitename
变量并删除空格,并在名称的末尾添加单词Label。
然后我尝试在表单上创建一个标签对象,其名称保存在elementname
变量中。
虽然在运行时不会导致错误或异常,但结果只输出一个标签,其中包含数组/列表中第一个条目的名称。
我可能会从错误的角度来看这个。我可以通过单步执行代码来了解它为什么不工作。它使用变量elementname
创建每个标签,而不是我想要的sitenamelabel。
我试图使用字典动态生成变量,但这似乎不起作用,并试图在表单上创建一个标签数组,然后用循环填充这些变量但是这似乎不起作用。
答案 0 :(得分:0)
您必须将您创建的每个标签实际添加到表单中。一个好方法是创建一个标签列表,并使用AddRange方法在最后添加它们。
labels = [] # create a blank list to hold all labels
for s in sites:
sitename = str(s) #Convert Name into a String
elementname = sitename.replace(" ","") + "Label"
elementname = Label()
elementname.Name = str(elementname)
elementname.Parent = self
elementname.Location = Point(lastx,lasty)
labels.append(elementname) # add each element to the list
counter = counter + counter
lasty = lasty + 10
# Add all labels to the form
MyForm.Controls.AddRange(System.Array[Label](labels))