2010-05-30 20 views
5

tengo string MyText que mantienen "L1"Cómo convertir cadenas a control?

tengo control de etiqueta que su nombre es "L1"

¿hay alguna manera de leer la etiqueta L1 usando MyText?

algo como: TMT = MyText.Text

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

gracias de antemano

Respuesta

4

Encuentre un control con nombre especificado:

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

o busca dentro de los controles de tipo especificado:

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

Editar:

si tiene una matriz de nombres ControlUsted puede encontrarlos:

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

(todo lo anterior requiere .NET 3.5)

Si no lo tiene, se puede hacer a continuación:

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_ no tiene un método _Where_ para mí – ErTR

1

Usted puede hacer algo como esto:

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

Sin embargo, la mejor práctica es evitar estos casos. .. Si pudieras especular un poco más por qué necesitas esto, probablemente habrá una mejor solución.

--edit: gracias por darse cuenta de que es/typeof ..

+0

tengo cadena de matriz [4] que contiene "L1, L2, L3, L4" - y necesito leer el texto que en la etiqueta que se llama l1, l2, l3, l4. ¿cómo hacerlo? Trato: ((control) arr [1] .toString()) de texto - pero conseguir el error – Gold

+1

Se debe utilizar el operador 'is' en lugar de tipos de comparación.. También debe 'break' el éxito de la búsqueda .. – abatishchev

2

Una forma más fácil es hacer algo como esto:

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

por ejemplo.

+0

su trabajo no - TMT tiene por qué ser int – Gold

+0

Funciona muy bien ... hay dos sobrecargas - uno para enteros y uno para las cadenas – corvuscorax

+0

Si no está 100% seguro de que esta' .Controls' contiene el nombre especificado, puede 'fundir' el tipo en lugar del operador' as': '((Botón) Controles [" myButton "]). Text'. Pero es mejor para comprobar que todo – abatishchev

Cuestiones relacionadas