Visual CSharp .NET - CREAR INSTANCIAS A PARTIR DE TEXTO

   
Vista:

CREAR INSTANCIAS A PARTIR DE TEXTO

Publicado por Alejandro S.C. (4 intervenciones) el 13/03/2011 08:55:37
Saludos a todos!!!!

Tengo un botón (button5) que está en el formulario principal de mi aplicación, al presionarlo recorre todos los controles del formulario y me dice cuantos controles hay de los tipos TextBox, PictureBox y Button. Lo hice así a nivel de ejemplo, pero realmente me interesa saber que controles hay para usar eso para algo más profundo.


private void button5_Click(object sender, EventArgs e)
{

int vBotones = 0, vTextBox = 0, vPictureBox = 0;
foreach (Control v_Control in this.Controls)
{
if (v_Control is Button)
{
v_Control.Text = vBotones.ToString();
vBotones += 1;
}
else if (v_Control is TextBox)
vTextBox += 1;
else if (v_Control is PictureBox)
vPictureBox += 1;
}

}

Lo anterior me funciona sin problemas, sin embargo, lo que deseo es tener en el formulario un ComboBox con los nombres de todos los formularios de mi aplicación. Por ejemplo frmVentas, frmClientes, frmPedidos, etc. y luego en la linea del código anterior:

foreach (Control v_Control in this.Controls)

yo poder cambiar this por el nombre del formulario que yo seleccione en el ComboBox y que me de la información de los controles del formulario que seleccione en el ComboBox.

Si yo creo una instancia de cada formulario, por ejemplo:

frmClientes instClientes = new frmClientes();

y luego en la linea pongo lo siguiente:

foreach (Control v_Control in instClienes.Controls)

me trabaja bien y me da los controles del formulario frmClientes, lo que yo quería era ver si existía una forma de solo tener la linea:

foreach (Control v_Control in XXXX.Controls)

y de alguna forma poner en XXXX la instancia del formulario que seleccione en el ComboBox.

Espero no haber sido muy complicada mi explicación. He probado con muchos códigos, pero no consigo lo que deseo, aunque hace años cuando programaba en visual basic 6 si lo logré.

Espero que alguien pueda ayudarme.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

CREAR INSTANCIAS A PARTIR DE TEXTO

Publicado por Marvin Emilson Pineda (10 intervenciones) el 15/03/2011 17:53:35
intenta de esta manera

private Form GetForm(string formName)
{
Reflection.Assembly assembly = Reflection.Assembly.GetExecutingAssembly();
foreach(Type type in assembly.GetTypes())
{
if (type.Name.Equals(formName))
return assembly.CreateInstance(type.FullName) as Form;
}
return null;
}

ha esta funcion solo deberas pasarle el nombre del formulario y el te devolvera la instancia del formulario.

pruebalo y confirma como te funciono.

Salu2,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

CREAR INSTANCIAS A PARTIR DE TEXTO

Publicado por Alejandro S.C. (4 intervenciones) el 16/03/2011 07:02:57
Marvin, muchas gracias. Era precisamente lo que necesitaba. Me funcionó de maravilla. Solo tuve que hacerle un pequeño cambio al código original, pues con el using System.Reflection no me funcionaba, así que opté por anteceder a la palabra Reflection la clase System. Y me quedó de esta forma:

private Form GetForm(string formName)
{

System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
foreach (Type type in assembly.GetTypes())
{
if (type.Name.Equals(formName))
return assembly.CreateInstance(type.FullName) as Form;
}
return null;
}

Y para usar lo que me enviaste me quedó así:

private void button5_Click(object sender, EventArgs e)
{
string vNombreFormularioEnTexto;
vNombreFormularioEnTexto = "frmPTesoreria"; //en este caso me interesa saber los controles del formulario que se llama frmPTesoreria

Form objFormulario = GetForm(vNombreFormularioEnTexto);

int vBotones = 0, vTextBox = 0, vPictureBox = 0;
foreach (Control v_Control in objFormulario.Controls)
{
if (v_Control is Button)
{
v_Control.Text = vBotones.ToString();
vBotones += 1;
}
else if (v_Control is TextBox)
vTextBox += 1;
else if (v_Control is PictureBox)
vPictureBox += 1;
}
}

Donde la variable string vNombreFormularioEnTexto yo la podría cargar con los valores de un ComboBox, que es exactamente lo que voy a implementar.

De nuevo muchas gracias Marvin.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar