2011-12-13 6 views
1

コントロールをループ経由でコントロールに追加することはできますか?難易度は名前です:循環ごとに同じですから、huという名前のコントロールが10つではなく、1つしかありません。10 Borderになるようにコードを変更するにはどうすればよいですか?ループ経由でコントロールを追加することは可能ですか?

for (int i = 0; i < 10; i++) 
{ 
    Border hu = new Border(); 
    hu.Width = 10; 
    hu.Height = 10; 
    hu.Margin = new Thickness(10 * i); 
    hu.Background = (Brush) typeof(Brushes).GetProperty(Felder[i]).GetValue(null, null); 
    mastergrid.Children.Add(hu); 
} 
+0

私はこれをWPFとしますか?追加されました。 – Ryan

+0

投稿したコードに何のエラーがありますか? – dthorpe

+1

WPFでコントロールを作成するこの方法をお勧めしません。 –

答えて

3

まずは可能です。あなたにできることは、この

hu.Name = string.Format("Border_{0}", i); 

かもしれないボーダーの場合は、しかし、例えば、ボタンのような名前を設定することです。どのようにして をイベントの制御を担当するデータにすることができますか? 1つのイベントを複数のコントロールにバインドするためです。通常、Control.Tagプロパティを使用して追加の データを追加し、イベントで使用します。たとえば:

public MainWindow() 
{ 
    InitializeComponent(); 

    for (int i = 0; i < 10; i++) 
    { 
     Border hu = new Border(); 
     hu.Width = 10; 
     hu.Height = 10; 
     hu.Margin = new Thickness(10 * i); 
     hu.Tag = anyObject; 
     hu.MouseDown += new MouseButtonEventHandler(hu_MouseDown); 
    } 
} 

void hu_MouseDown(object sender, MouseButtonEventArgs e) 
{ 
    Border b = (Border)sender; 
    // b.Tag contains your "anyObject" 
} 

更新

は、あなたの場合、「HU」で、あなたのインスタンスを保持する変数の名前は、あなたのコントロールのNameプロパティと同じではないことに注意してください。

+0

@mintech、素晴らしい編集。なぜ説明できますか? – dknaack

+0

ノイズリダクションです。 –

+0

ああ、意味があります。私はそれを過去のほぼすべての答えに使ってきました。今から私はそれを残します。ありがとう! – dknaack

0

コードでは、「hu」という名前の複数のコントロールを作成しません。名前のない複数のコントロールを作成すると、ローカル変数の名前は関係ありません。あなたが名前を必要としない限り、そうすることは完全にうまくいくはずです。そうした場合は、各コントロールに対して一意の名前を作成することができます。

関連する問題