使用循环创建 100+ Windows 个表单组件
Creating 100+ Windows Form Components Using a Loop
我对此失去了理智 - 浏览了许多不同的文章、论坛和问题,但仍然无法弄清楚。
我是一个编程菜鸟,我目前正在使用 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])
数组如下所示:
站点名称 1、站点名称 2、站点名称 3、站点名称 4 等
在我的 "MyForm" class 中,这是我在显示表单之前创建子控件的地方,我有一个循环来遍历此数组并为列表中的每个站点名称条目创建一个标签。
#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
变量中。
虽然这在我 运行 时不会导致错误或异常,但结果只输出一个带有 array/list.
中第一个条目名称的标签
我可能是从错误的角度来的。我可以通过单步执行代码来了解为什么它不起作用。它使用变量 elementname
创建每个标签,而不是我想要的站点名称标签。
我曾尝试使用字典动态生成变量,但这似乎不起作用,并尝试在表单上创建一个标签数组,然后用循环填充这些变量,但这似乎不起作用工作。
您实际上必须将创建的每个标签添加到表单中。执行此操作的一个好方法是创建标签列表并使用 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))
我对此失去了理智 - 浏览了许多不同的文章、论坛和问题,但仍然无法弄清楚。
我是一个编程菜鸟,我目前正在使用 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])
数组如下所示: 站点名称 1、站点名称 2、站点名称 3、站点名称 4 等
在我的 "MyForm" class 中,这是我在显示表单之前创建子控件的地方,我有一个循环来遍历此数组并为列表中的每个站点名称条目创建一个标签。
#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
变量中。
虽然这在我 运行 时不会导致错误或异常,但结果只输出一个带有 array/list.
中第一个条目名称的标签我可能是从错误的角度来的。我可以通过单步执行代码来了解为什么它不起作用。它使用变量 elementname
创建每个标签,而不是我想要的站点名称标签。
我曾尝试使用字典动态生成变量,但这似乎不起作用,并尝试在表单上创建一个标签数组,然后用循环填充这些变量,但这似乎不起作用工作。
您实际上必须将创建的每个标签添加到表单中。执行此操作的一个好方法是创建标签列表并使用 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))