2017-10-19 2 views
0

après avoir créé une textBlock en boucleComment se cacher, objet visible par son nom?

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; 

alors je veux montrer textBlock ce nom est TB3 même code tb3.Visibility= Visibility.Visible Comment puis-je faire avec find automatique nom de l'objet dans le code?

édité: désolé pour mon mauvais gramme. Je veux savoir ce que le code en C# ce même code document.getElementById('#name') javascript

+0

'alors je veux afficher le texteBlock ce nom est tb3 même code' quoi? Honnêtement, je n'ai aucune idée de ce que vous entendez par cette phrase – EpicKip

+0

oui, veuillez préciser – casiosmu

+0

Je ne peux pas vous expliquer comprendre avec mon faible gramma. Je veux savoir commande dans C# même document.getElementById ('nom') dans javascript –

Répondre

1

par exemple stocker vos objets TextBlock dans une liste: List<TextBlock> que vous pouvez itérer

Mise à jour:

Je pense que vous commencez dans la mauvaise direction: vous pouvez faire ça. comme javascripts document.getElementByID(), son appelé Réflexion; mais si vous êtes un débutant, je ne peux pas le recommander.

Vous pouvez obtenir tous les contrôles dans un formulaire/contrôle en recherchant dans le tableau myControl.Controls, et vérifiez leurs noms/types.

Mais la façon la plus simple serait une liste pour contenir les objets 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; 
    } 

Une autre façon

+0

Ce n'est pas "cacher l'objet visible par son nom" – EpicKip

+1

ok, mais au moins la partie "find" – casiosmu

+0

Vous ne montrez même pas comment le trouver dans une liste (vous pouvez utiliser linq ou quelque chose de toute évidence) – EpicKip

0

C# est pas comme JavaScript

Vous avez utilisé le code document.getElementById('#name') pour montrer votre intention. Laissez-nous analyser ce que JS fait exactement quand il exécute cette ligne. Il recherche l'ensemble de votre DOM pour un objet portant l'ID nom et renvoie une référence à celui-ci.

C# ne fonctionne pas comme ça. Il n'y a pas de pile d'objets facilement consultable quelque part, où vous avez juste besoin d'effectuer une requête et obtenir l'objet que vous voulez. Si vous voulez conserver une liste d'objets, vous devez faire cette liste vous-même. Je suppose que vous créez plusieurs objets-TextBlock. Lorsque vous faites cela, vous devez les ajouter à une liste, que vous pouvez ensuite interroger. Voici un exemple d'implémentation:

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(); 

} 

Un soupçon amical pour vous, car je suppose que vous n'êtes pas très compétent avec C# encore: Lorsque vous arrivez à un nouveau langage de programmation, ne présumez pas qu'il suit exactement les mêmes paradigmes que les autres langues que vous connaissez, même si elles ont parfois des similitudes. La raison pour laquelle nous avons tellement de langues différentes est que certaines choses sont faciles dans une, et difficiles dans une autre.

+0

Vous pouvez trouver un contrôle par nom, ne le rend pas plus difficile que ce qu'il est en interprétant la question encore plus compliquée – EpicKip

+0

Ahh, je ne le savais pas, puisque je ne travaille pas trop souvent avec WinForms. N'hésitez pas à éditer ma réponse et suggérer un exemple plus facile –

+0

Ce n'est pas winforms, son wpf et la réponse suggérée (https://stackoverflow.com/a/46830707/2885376) par Casiosmu est bien, je modifierais si j'avais plus de connaissances de WPF (et pourrait mieux répondre que la réponse actuelle). Mais OP est déjà passé à la recherche sur google: "comment obtenir le contrôle par nom wpf" – EpicKip