2016-12-22 4 views
1

多くの異なる記事、フォーラム、および質問を通していますが、まだこれを理解できません。ループを使用して100以上のWindowsフォームコンポーネントを作成する

私はプログラミングのnoobです。現在、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]) 

配列は次のようになります。私の「MyFormを」クラス内 サイト名1、サイト名2、サイト名3、サイト名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変数を取り、スペースを削除し、名前の最後に単語ラベルを追加します。

それから、elementname変数に保持されている名前でフォームにラベルオブジェクトを作成してみてください。

これは実行時にエラーまたは例外を発生させませんが、結果は配列/リストの最初のエントリの名前を持つ1つのラベルのみを出力します。

私は間違った角度から来ている可能性があります。私はなぜコードをステップ実行することで動作していないのか分かります。変数elementnameを持つすべての単一のラベルを作成し、私が意図していたsitenamelabelではありません。

辞書を使用して変数を動的に生成しようとしましたが、これはうまくいかないように見え、フォームにラベルの配列を作成してループに挿入しようとしましたが、 。

答えて

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)) 
関連する問題