2016-11-04 100 views
0

此刻,我有多個文本塊,我想根據字符串的名稱進行訪問。請看下面的例子: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"; 
     } 
    } 

正如你所看到的,我試圖訪問文本1,文本2,等我這樣做的原因是因爲「名」的值可以隨時更改,所以我可以重新使用這段代碼。我也可以使「i < 5」成爲「i <數字」並且該方法將int作爲參數之一。當然問題是這不會真正起作用。我需要字符串名稱作爲名稱給出的TextBlock的引用。任何幫助表示讚賞!

+0

爲什麼不使用數組來代替? – PetSerAl

+0

數組爲什麼,爲什麼? – Saghen

+0

你有沒有問題'[name + i] .Text =「哇」'?如果是這樣,你不應該這樣訪問控制。相反,試試吧, this.Controls [name + i] .Text =「哇」; – 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中定義的文本塊的編輯,將XAML中定義的名稱放在'new 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

相關問題