2016-12-22 1 views
1

많은 다른 기사, 포럼 및 질문을 통해이 문제를 해결했지만 여전히이를 파악할 수는 없습니다.루프를 사용하여 100 개 이상의 Windows Form 구성 요소 만들기

저는 프로그래밍 멍청한 놈입니다. 현재 IronPython을 사용하여 Windows Form 응용 프로그램을 만듭니다. 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, 사이트 이름이, 사이트 이름 3 등 내 "MyForm을"클래스 내부

사이트 이름 중 4 이 배열을 통과하고 목록의 각 사이트 이름 항목에 대한 레이블을 만들 루프가있는 양식을 표시하기 전에 자식 컨트롤을 만드는 위치입니다.

#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

에는 공백 (예를 들어, 북부 사이트)와 문자열 값 목록에서 현재 사이트 이름 항목을 변환합니다.

변수 elementnamesitename 변수를 취해 공백을 제거하고 이름 끝에 Label이라는 단어를 추가합니다.

그런 다음 변수 이름이 elementname 인 양식과 함께 레이블 객체를 만듭니다.

실행해도 오류 또는 예외는 발생하지 않지만 결과는 배열/목록의 첫 번째 항목 이름이있는 레이블 하나만 출력합니다.

나는 잘못된 각도에서 올 수 있습니다. 왜 코드를 실행하여 작동하지 않는지 알 수 있습니다. 그것은 내가 의도 한 sitenamelabel이 아닌 변수 elementname을 가진 모든 단일 레이블을 만듭니다.

사전을 사용하여 변수를 동적으로 생성하려고 시도했지만 작동하지 않는 것처럼 보였습니다. 양식에 레이블 배열을 만든 다음 루프로 채우려고했지만 작동하지 않았습니다 .

답변

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)) 
관련 문제