como abrir formulario pasado por variable.

07/02/2007 - 23:03 por Xuri | Informe spam
Hola, queria saber como hacer algo asi


form formulario = new form();

pero que formulario sea una variable.. por ejemplo

string nombre_form = "clientes";
form nombre_form = new form ();


y asi poder abrir con esa linea de codigo varios formularios. no se si me
explico.



Gracias. Un saludo

Ademas

Preguntas similare

Leer las respuestas

#6 rogerrod61
09/02/2007 - 06:36 | Informe spam
Xuri, muchas soluciones sencillas a veces las volvemos complejas, pero
en oportunidades hay forma de realizarlas más simples, así de tu
consulta he podido comprobarlo, pues cuando yo necesité esta solución
me deje guiar por el no se puede, creo que el código siguiente
responde con mayor claridad a tu consulta, ya que si observas, es muy
similar a tu propuesta inicial.

string wSTproyecto System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
string wSTformulario = "clientes";

Form wFO = (Form)Activator.CreateInstance(Type.GetType(wSTproyecto +
"." + wSTformulario));
wFO.Show();

Puedes pegar el codigo en cualquier boton y llamar al formulario que
desees cambiando el string wSTformulario o bien colocar el nombre en
un textbox.
Espero haberte colaborado, saludos,

Roger
Respuesta Responder a este mensaje
#7 Xuri
09/02/2007 - 13:34 | Informe spam
bueno chicos, he intentado lo siguiente:

string wSTformulario = "clientes";
string wSTproyecto =
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;

string wSTform = wSTproyecto + ".formularios." + wSTformulario;
facturacion.clases.formulario wFO =
(facturacion.clases.formulario)Activator.CreateInstance(Type.GetType(wSTform));
wFO.Show();


ya que "clientes" es un objeto del tipo "facturacion.clases.formulario".

Me da el siguiente error:

No se controló System.ArgumentNullException
Message="El valor no puede ser nulo.Nombre del parámetro: type"
Source="mscorlib"
ParamName="type"
StackTrace:
en System.Activator.CreateInstance(Type type, Boolean nonPublic)
en System.Activator.CreateInstance(Type type)
en facturacion.inicio..ctor() en
C:\proyectos\facturacion2\formularios\MainForm.cs:línea 125
en facturacion.inicio.Main(String[] args) en
C:\proyectos\facturacion2\formularios\MainForm.cs:línea 147
en System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
en System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence
assemblySecurity, String[] args)
en Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
en System.Threading.ThreadHelper.ThreadStart_Context(Object state)
en System.Threading.ExecutionContext.Run(ExecutionContext
executionContext, ContextCallback callback, Object state)
en System.Threading.ThreadHelper.ThreadStart()




GRACIAS.

Un saludo
"rogerrod61" wrote:

Xuri, muchas soluciones sencillas a veces las volvemos complejas, pero
en oportunidades hay forma de realizarlas más simples, así de tu
consulta he podido comprobarlo, pues cuando yo necesité esta solución
me deje guiar por el no se puede, creo que el código siguiente
responde con mayor claridad a tu consulta, ya que si observas, es muy
similar a tu propuesta inicial.

string wSTproyecto > System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
string wSTformulario = "clientes";

Form wFO = (Form)Activator.CreateInstance(Type.GetType(wSTproyecto +
"." + wSTformulario));
wFO.Show();

Puedes pegar el codigo en cualquier boton y llamar al formulario que
desees cambiando el string wSTformulario o bien colocar el nombre en
un textbox.
Espero haberte colaborado, saludos,

Roger


Respuesta Responder a este mensaje
#8 rogerrod61
09/02/2007 - 21:27 | Informe spam
Hola, lo que te falto fue profundizar en la clase con el signo +,
quedando así:

string wSTformulario = "clientes";
string wSTproyecto System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;


string wSTform = wSTproyecto + ".facturacion+clases
+formularios+" + wSTformulario;
facturacion.clases.formulario wFO (facturacion.clases.formulario)Activator.CreateInstance(Type.GetType(wSTfor­
m));
wFO.Show();

Saludos,

Roger
Respuesta Responder a este mensaje
#9 Xuri
09/02/2007 - 21:49 | Informe spam
nada que no hay manera:

Tengo la siguiente estructura:

facturacion ( proyecto )
|
|-Clases
| |___ Formulario.cs ( clase base )
|
|
|-Formularios
|_____ Clientes.cs ( lo que quiero crear automaticamente
pasando por variable)


He probado lo siguiente para probarlo y nada, lo mismo

facturacion.clases.formulario wFO =
(facturacion.clases.formulario)Activator.CreateInstance(Type.GetType("facturacion+formularios+clientes"));
wFO.Show();


Tambien he probado lo siguiente

facturacion.clases.formulario wFO =
(facturacion.clases.formulario)Activator.CreateInstance(Type.GetType("facturacion.formularios.clientes"));
wFO.Show();

Gracias por la atencion. Un saludo


"rogerrod61" wrote:

Hola, lo que te falto fue profundizar en la clase con el signo +,
quedando así:

string wSTformulario = "clientes";
string wSTproyecto > System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;


string wSTform = wSTproyecto + ".facturacion+clases
+formularios+" + wSTformulario;
facturacion.clases.formulario wFO > (facturacion.clases.formulario)Activator.CreateInstance(Type.GetType(wSTfor­
m));
wFO.Show();

Saludos,

Roger


Respuesta Responder a este mensaje
#10 rogerrod61
09/02/2007 - 23:28 | Informe spam
Hola, gracias por proporcionarme como tienes tus clases, así pude
hacer pruebas más reales, espero que ahora te funcione como lo
necesitas.

string wSTproyecto System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
string wSTformulario = "clientes";
wSTformulario = wSTproyecto + ".Facturacion+Formularios+" +
wSTformulario;
Facturacion.Clases wFO (Facturacion.Clases)Activator.CreateInstance(Type.GetType(wSTformulario));
wFO.Show();

Funciona bien, como verás, si hay manera, solamente que al no conocer
como esta la estructura de las clases es como estar en tinieblas. De
no funcionarte, hazme el favor de proporcionarme la clase Facturacion
y con gusto te preparare las sentencias correspondientes o te envio
mis pruebas, pero creo que no será necesario. Ten cuidado con los
puntos y los signos especialmente en ".Facturacion+Formularios+".
Según tu estructura de clases, Facturacion.Clases lo usas como tipo y
Facturación.Formularios es donde alojas tus formularios, así podrás
acceder a cualquiera de ellos con string.

Este hilo me sirvio mucho y ha sido muy educativo, gracias por
permitirme colaborarte, Me ayudaria mucho saber si te funcionó,
saludos,


Roger

PD
Funciona asumiendo que tienes las clases de la siguiente forma o algo
así:

namespace WindowsApplication1
{
public class Facturacion
{
public class Clases : Form
{
// Métodos, Clases objetos, etc.
}

public class Formularios
{
public partial class clientes : Clases
{
public clientes()
{
}
}
public partial class inventario : Clases
{
public inventario()
{
}
}
}
}
}
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida