在循环中创建textBlock后
TextBlock tb = new TextBlock();
tb.Text = dataShows.name[i];
tb.TextAlignment = TextAlignment.Center;
tb.Foreground = new SolidColorBrush(Colors.Black);
tb.Name = "tb" + i;
tb.Visibility = Visibility.Hidden;
然后我想显示textBlock,该名称是tb3相同的代码tb3.Visibility= Visibility.Visible
如何使用代码中的自动查找对象名称来执行此操作?
编辑:抱歉我的语法不好。我想知道C#中的代码与javascript中的代码document.getElementById('#name')
相同
答案 0 :(得分:1)
例如将TextBlock对象存储在列表中:List<TextBlock>
可以迭代
<强>更新强>
我认为你从错误的方向开始:你可以做某事。像javascripts document.getElementByID()
,它叫做Reflection;但如果你是初学者,我不推荐这个。
您可以通过搜索myControl.Controls
数组来获取表单/控件中的所有控件,并检查它们的名称/类型。
但最简单的方法是保存TextBlock对象的列表:
List<TextBlock> a = new List<textBlock>();
// in the creating loop:
a.Add(tb);
// access using Linq:
textBlock res = a.Find(c=>c.Name=="thename");
// is roughly the same as
foreach(TextBlock b in a)
if(b.Name=="thename") {
res = b;
break;
}
另一种方式
答案 1 :(得分:0)
C#与JavaScript不一样
您使用代码document.getElementById('#name')
来显示您的意图。让我们分析一下JS在执行这一行时究竟做了什么。它在整个DOM中搜索ID为 name 的对象,并返回对它的引用。
C#不会那样运作。在某处没有容易搜索的对象堆,您只需要执行查询并获得所需的对象。如果你想保留一个对象列表,你必须自己制作该列表。
我假设你正在创建几个TextBlock
- 对象。当您这样做时,您需要将它们添加到列表中,然后您可以查询该列表。以下是一个示例实现:
List<TextBlock> textBlocks = new List<TextBlock>();
private TextBlock GetTextBlockByName(string name)
{
if(name == null) return null; //I assume that a TextBlock needs to have a name.
// Returns the TextBlock if it was found or null if not.
// Throws an Exception if more than one TextBlock has the same name
return this.textBlocks.Find(t => t.Name == name).SingleOrDefault();
}
一个友好的暗示,因为我认为你对C#并不十分精通:当你使用一种新的编程语言时,不要认为它遵循你所知道的其他语言完全相同的范例,即使他们偶尔也有相似之处。我们拥有这么多不同语言的全部原因是,有些东西很容易合而为一,而另一些则很难。