2016-11-04 7 views
0

現時点では、文字列の名前に応じてアクセスする複数のテキストブロックがあります。以下の例を見て:あなたが見ることができるように、私は「名前」の値は随時変更される可能性があるため、私はこれをやっている理由があるなどテキスト1、テキスト2に、アクセスしようとしていますC#:オブジェクト参照の名前としての文字列値の使用

TextBlock test1 = new TextBlock(); 
    TextBlock test2 = new TextBlock(); 
    TextBlock test3 = new TextBlock(); 
    TextBlock test4 = new TextBlock(); 

    public static void changeValues() 
    { 
     string name = "test"; 
     for (int i = 1; i < 5; i++) 
     { 
      [name + i].Text = "Wow"; 
     } 
    } 

ので、Iこのコードを再利用することができます。また、 "i < 5"を "i < number"にして、メソッドが引数の1つとしてintを取るようにすることもできます。問題は実際にはうまくいかないことです。私は名前が与えるTextBlockへの参照になるために文字列名が必要です。どんな助けもありがとう!

+0

なぜ代わりに配列を使用することではありませんか? – PetSerAl

+0

なぜ何のための配列と正確に? – Saghen

+0

'[name + i] .Text = "Wow"という行に問題がありますか?もしそうなら、あなたはこのようなコントロールにアクセスすべきではありません。代わりに、 this.Controls [name + i] .Text = "Wow"を試してください。 – Bharathi

答えて

1

@PetSerAl言っている:どのように辞書について

var yourBlocks = new TextBlock[] 
{ 
    new TextBlock(), 
    new TextBlock(), 
    new TextBlock(), 
    new TextBlock() 
}; 

foreach (var block in yourBlocks) 
{ 
    block.Text = "Wow"; 
} 
+0

これはどのように正確に機能しますか? – Saghen

+0

'new TextBlock []'にブレークポイントを置き、デバッガでステップスルーします。 XAMLで定義されたtextblockを使用する方法については、XAMLで定義されている名前を新しいTextBlock [] {...} 'に入れてください。 –

0

Dictionary<string, string> myDictionary= 
      new Dictionary<string, TextBlock>(); 
myDictionary.Add("name1", mytextBlock1); 
myDictionary.Add("name2", mytextBlock2); 
myDictionary["name1"] = new TextBlock(); 
var tBlock = myDictionary["name2"]; 

Detail here

+0

名前に基づいてテキストブロックを作成していないでしょうか。これは私がやりたいことではありません。 – Saghen

関連する問題