Foros del Web » Programación para mayores de 30 ;) » .NET »

Convertir string en nombre de form c#

Estas en el tema de Convertir string en nombre de form c# en el foro de .NET en Foros del Web. Tengo la siguiente funcion, la cual deseo me sirva para abrir distintos formularios mandandole como parametro el nombre del form: Cita: //funcion reutilizable para abrir ...
  #1 (permalink)  
Antiguo 06/07/2009, 21:33
 
Fecha de Ingreso: mayo-2002
Mensajes: 486
Antigüedad: 21 años, 11 meses
Puntos: 0
Convertir string en nombre de form c#

Tengo la siguiente funcion, la cual deseo me sirva para abrir distintos formularios mandandole como parametro el nombre del form:

Cita:
//funcion reutilizable para abrir formularios
public void CargaForm(string NomForm)
{

Form Formulario = new Presentacion.NomForm();
Formulario .MdiParent = Index.ActiveForm;
Formulario .Show();
Formulario .BringToFront();


}
// boton desde el cual llamo a la funcion
private void toolStripButton1_Click(object sender, EventArgs e)
{
CargaForm("Cotizaciones");
}

Me sale el siguiente error:

Cita:
Error 1 No se puede encontrar el tipo o el nombre de espacio de nombres 'NomForm' (¿falta una directiva using o una referencia de ensamblado?) E:\csharp\sk-Si\Presentacion\Controles\MenuOutlock.cs 30 26 Presentacion
Llevo años programando el PHP y es posible que esté trasladando algunos hábitos a .net, les agradeceré me den alguna idea.

Gracias
__________________
Sistemass.com - Centro de capacitación profesional
http://www.sistemass.com
  #2 (permalink)  
Antiguo 07/07/2009, 08:04
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: Convertir string en nombre de form c#

Bueno para esto debes trabajar de otra manera aqui un ejemplo

Código C#:
Ver original
  1. Dictionary<string, Form> Ins = new Dictionary<string, Form>(); // Se Gurdan aqui los formularios que hayan sido abiertos para no volver a llamarlos
  2.  
  3. public void OpenForm(String NombreForm)
  4.         {
  5.             try
  6.             {
  7.                 Form Frm;
  8.                 if (!Ins.TryGetValue(NombreForm, out Frm) || Frm.IsDisposed)
  9.                 {
  10.                     Frm = (Form)Activator.CreateInstance(null, NombreForm).Unwrap();
  11.                     Ins[NombreForm] = Frm;
  12.                 }
  13.                 Frm.MdiParent = this;
  14.                 Frm.Activate();
  15.                 Frm.WindowState = FormWindowState.Normal;
  16.                 Frm.Show();
  17.  
  18.             }
  19.             catch (Exception e)
  20.             {
  21.                 throw e;
  22.             }
  23.         }

Nota: Si el Formulario va dentro de una carpeta debes poner el nombre de la carpeta + punto + nombre de formulario ejm:

Diseño.frmempleados
Diseño.reportes.reporteempleados
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #3 (permalink)  
Antiguo 08/07/2009, 11:56
 
Fecha de Ingreso: mayo-2002
Mensajes: 486
Antigüedad: 21 años, 11 meses
Puntos: 0
Respuesta: Convertir string en nombre de form c#

gracias por la respuesta Dradi7, lo probé y funciona.
__________________
Sistemass.com - Centro de capacitación profesional
http://www.sistemass.com
  #4 (permalink)  
Antiguo 08/07/2009, 16:05
 
Fecha de Ingreso: mayo-2002
Mensajes: 486
Antigüedad: 21 años, 11 meses
Puntos: 0
Como llamo a esta funcion desde un formulario hijo

El metodo propuesto funciona de maravilla mientras se instancie desde el formulario MDI, sin embargo, si es que intento usar dicho metodo desde otro formulario, igual abre pero genera duplicados:
1. Form "ArticulosLista" (abierto desde el MDI)
2. Form "ArticulosLista" (abierto desde otro formulario hijo)

Lo ideal es que solo abra un formulario, sin importar si la llamada se hizo en el mdi o en el hijo. ¿alguna idea?


Esta clase esta creada en un archivo externo Acciones.cs
Cita:

public class AbrirForm
{
Dictionary<string, Form> Ins = new Dictionary<string, Form>(); // Se Gurdan aqui los formularios que hayan sido abiertos para no volver a llamarlos. Trabaja con OpenForm

public void OpenForm(String NombreForm)
{
try
{
Form Frm;
if (!Ins.TryGetValue(NombreForm, out Frm) || Frm.IsDisposed)
{
Frm = (Form)Activator.CreateInstance(null, NombreForm).Unwrap();
Ins[NombreForm] = Frm;
}
Frm.MdiParent = Index.ActiveForm;
Frm.Activate();
Frm.WindowState = FormWindowState.Normal;
Frm.Show();

}
catch (Exception e)
{
throw e;
}
}
}

Aqui el formulario hijo desde el cual llamo a ese metodo. En el form MDI llamo de la misma manera al mismo Form "ArticulosLista".
Cita:
// formulario hijo.cs
AbrirForm AbreF = new AbrirForm();


private void toolStripButton1_Click(object sender, EventArgs e)
{
AbreF.OpenForm("Presentacion.ArticulosLista");

}
__________________
Sistemass.com - Centro de capacitación profesional
http://www.sistemass.com

Última edición por kotosh; 08/07/2009 a las 16:14
  #5 (permalink)  
Antiguo 08/07/2009, 16:14
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: Convertir string en nombre de form c#

entonces declara el dictionary como una variable global y despues buscando en dicha variable buscas si el formulario ya esta agregado y el codigo es el mismo
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #6 (permalink)  
Antiguo 08/07/2009, 20:03
 
Fecha de Ingreso: mayo-2002
Mensajes: 486
Antigüedad: 21 años, 11 meses
Puntos: 0
Respuesta: Convertir string en nombre de form c#

Dradi7 gracias por tu tiempo.
Lo solucione con esto que me recomendaste:

static Dictionary<string, Form> Ins = new Dictionary<string, Form>();


Saludos
__________________
Sistemass.com - Centro de capacitación profesional
http://www.sistemass.com
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:37.