2010-05-30 5 views
5

j'ai string MyText qui détiennent « L1 »Comment convertir une chaîne à contrôler?

j'ai le contrôle de l'étiquette que son nom est « L1 »

est-il possible de lire l'étiquette L1 en utilisant MonTexte?

quelque chose comme: TMT = MyText.Text

ou: TMT = ((Control)MyText.ToString()).Text;

merci à l'avance

Répondre

4

Trouver un contrôle avec un nom spécifique:

var arr = this.Controls.Where(c => c.Name == "Name"); 
var c = arr.FirstOrDefault(); 

ou recherche dans les contrôles de type spécifié:

var arr = this.Controls.OfType<Label>(); 
var c = arr.FirstOrDefault(); 

Edit:

si vous avez un tableau de noms de contrôle vous peut les trouver:

var names = new[] { "C1", "C2", "C3" }; 

// search for specified names only within textboxes 
var controls = this.Controls 
    .OfType<TextBox>() 
    .Where(c => names.Contains(c.Name)); 

// put the search result into a Dictionary<TextBox, string> 
var dic = controls.ToDictionary(k => k, v => v.Text); 

(tout ci-dessus nécessite .NET 3.5)

Si vous ne l'avez pas, vous pouvez le faire suivant:

Control[] controls = this.Controls.Find("MyControl1"); 
if(controls.Lenght == 1) // 0 means not found, more - there are several controls with the same name 
{ 
    TextBox control = controls[0] as TextBox; 
    if(control != null) 
    { 
     control.Text = "Hello"; 
    } 
} 
+0

_Controls_ n'a pas de méthode _Where_ pour moi – ErTR

1

Vous pouvez faire quelque chose comme ceci:

 foreach (var c in this.Controls) 
     { 
      if (c is Label) 
      { 
       var x = (Label)c; 
       if (x.Name == "label1") 
       { 
        x.Text = "WE FOUND YOU"; 
        break; 
       } 
      } 
     } 

Cependant, les meilleures pratiques est d'éviter de tels cas. .. Si vous pouviez spéculer un peu plus pourquoi vous en avez besoin, il y aura probablement une meilleure solution.

--edit: Merci pour remarquer que est/typeof ..

+0

i have chaîne arr [4] qui contiennent "l1, l2, l3, l4" - et j'ai besoin de lire le texte qui dans l'étiquette qui a appelé l1, l2, l3, l4. comment faire? J'essaie: ((control) arr [1] .tostring()). Text - mais obtenez l'erreur – Gold

+1

Vous devriez utiliser l'opérateur 'is' au lieu de la comparaison de types. Il devrait également «casser» sur le succès de la recherche .. – abatishchev

2

Un moyen plus facile est de faire quelque chose comme ceci:

string TMT = "myButton";  
// later in the code ... 
(Controls[TMT] as Button).Text = "Hullo"; 

par exemple.

+0

son ne fonctionne pas - TMT doit être int – Gold

+0

Cela fonctionne très bien ... il y a deux surcharges - une pour les ints et une pour les chaînes – corvuscorax

+0

Si vous êtes sûr à 100% que 'this .Controls' contient le nom spécifié, vous pouvez 'cast' à la place de l'opérateur' as': '((Button) Controls [" myButton "]). Text'. Mais il est préférable de tout vérifier – abatishchev

Questions connexes