2016-11-04 96 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

相关问题