Traducir variables a objetos

31/07/2004 - 19:49 por vicente | Informe spam
Tengo un formulario con numerosos textbox y quisiera
poner recorrerlos todos con un simple FOR, de manera que
pudiera contruir el nombre del objeto textbox con la
variable que realiza el recorrido del bucle, por ejemplo
en un bucle de 1 a 100 tendria el textBox1,
textBox2...textBox100.

Hay algun modo de llamar al la
variable 'textBox'+'nombre de variable del bucle' y luego
esto traducirloa textBox1 por ejemplo.

Gracias y un saludo desde Valencia.

Vicente.

Preguntas similare

Leer las respuestas

#1 Miguel Ortiz Falcón
31/07/2004 - 21:08 | Informe spam
Hola Vincente, asi como lo quieres no es posible, debido
a que el nombre que se le asignan a las variables de
cualquier tipo no puede ser de manera dinámica, se hace
en tiempo de desarrollo y compilación.

El mismo efecto que tu quieres puede realizarse de dos
maneras, una podria ser teniendo un array de TextBox y la
otra con un ArrayList y sería más o menos así:

1:

TextBox[] array = new TextBox[100]; // 100 por ejemplo

for(int i = 0; i < array.Lenght; i++)
array[i] = new TextBox();

2:
ArrayList arrayList = new ArrayList();

for(int i = 0; i < 100; i++)
arrayList.Add(new TextBox());


En ambos casos podrías recorrerlos despues sin ningun
problema. Me parece que la propiedad Location si tendrias
que calcularla dinámicamente también, "creo", eso checalo
bien porfa...lo mismo para agregarlos al Container...

Saludos...

Miguel Ortiz Falcon
...

y pues en el futuro cuando quieras acceder a tus TextBox
puedes usarlo asi

Tengo un formulario con numerosos textbox y quisiera
poner recorrerlos todos con un simple FOR, de manera que
pudiera contruir el nombre del objeto textbox con la
variable que realiza el recorrido del bucle, por ejemplo
en un bucle de 1 a 100 tendria el textBox1,
textBox2...textBox100.

Hay algun modo de llamar al la
variable 'textBox'+'nombre de variable del bucle' y


luego
esto traducirloa textBox1 por ejemplo.

Gracias y un saludo desde Valencia.

Vicente.
.

Respuesta Responder a este mensaje
#2 Javier Ros
02/08/2004 - 14:16 | Informe spam
Vicente, yo me dí con lo mismo, en Delphi si habia un Form.ComponentByName()
por que
el nombre se guardaba como una propiedad más, pero en C# no es así (una
lastima por cierto)
pero tienes otras alternativas, puedes hacerlo de la siguiente manera:

foreach (object o in myForm.Controls)
if (o.GetType() == typeof(TextBox))
{
TextBox MyTextBox = (TextBox)o;
..
// Haz lo que quieras hacer.
..
}

Con eso recorres todos los controles del formulario y si es un textbox pues
actuas.
Yo personalmente uso otra cosa, pues uso distintos tipos de TextBoxes, por
lo tanto, sabiendo
que todos heredan de TextBoxBase hago lo siguiente:

foreach (object o in myForm.Controls)
if (o.GetType().IsSubClassOf(typeof(TextBoxBase)))
{
TextBoxBase MyTextBox = (TextBoxBase)o;
..
// Haz lo que quieras hacer.
..
}

Y para rizar el rizo, si solo quieres recorrer ciertos textbox te puedo
sugerir que uses la propiedad Tag:

foreach (object o in myForm.Controls)
if (o.GetType().IsSubClassOf(typeof(TextBoxBase)))
if (((TextBoxBase)o).Tag = 1)
{
TextBoxBase MyTextBox = (TextBoxBase)o;
..
// Haz lo que quieras hacer.
..
}

Este último código recorre todos los controles que heredan de textboxbase y
que tengan un 1 (uno) en la propiedad tag, espero que
te sirva de ayuda.

"vicente" escribió en el mensaje
news:7bad01c47726$ca6f9770$
Tengo un formulario con numerosos textbox y quisiera
poner recorrerlos todos con un simple FOR, de manera que
pudiera contruir el nombre del objeto textbox con la
variable que realiza el recorrido del bucle, por ejemplo
en un bucle de 1 a 100 tendria el textBox1,
textBox2...textBox100.

Hay algun modo de llamar al la
variable 'textBox'+'nombre de variable del bucle' y luego
esto traducirloa textBox1 por ejemplo.

Gracias y un saludo desde Valencia.

Vicente.
Respuesta Responder a este mensaje
#3 Tristan
02/08/2004 - 20:19 | Informe spam
La verdad es que yo en Delphi, haría lo mismo que en C#. Crear los controles
de forma dinámica e incluirlos en una colección. Esta se puede recorrer con
un bucle, por índice. Bastante más cómodo y eficiente que por nombre.

O sea algo así:

TextBox[] textBox = new TextBox[10];

for (int i = 0; i < textBox.Length; i++)
{
TextBox tb = new TextBox();
tb.Top = i * tb.Height;
textBox[i] = tb;
}
this.Controls.AddRange(textBox);

textBox[3].Text = "Este es el elemento 3";


Si el array debe poder crecer dinámicamente, utilizaría un ArrayList, o una
colección personalizada, derivada de CollectionBase.

Juan Carlos Badiola
MVP - C#
Respuesta Responder a este mensaje
#4 Tristan
02/08/2004 - 20:31 | Informe spam
Ahhh. Siempre y cuando los controles se hayan creado a través del diseñador,
y sean por tanto un campo de la clase, se puede encontrar un equivalente a
ComponentByName, mediante reflection:

private Control ComponentByName(string name)
{
FieldInfo campo = this.GetType().GetField(name, BindingFlags.Instance |
BindingFlags.NonPublic);
return (Control) campo.GetValue(this);
}

Juan Carlos Badiola
MVP - C#
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida