Ver Mensaje Individual
  #3 (permalink)  
Antiguo 25/02/2010, 07:51
xbyte84
 
Fecha de Ingreso: febrero-2010
Mensajes: 4
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Ayuda por favor me es urgente

Cita:
Iniciado por gedarufi Ver Mensaje
Si te entiendo bien lo que debes de hacer es implementar un formulario tipo MDI para que dentro de él puedas abrir cada uno de los documentos.

Saludos

Gracias por responderme pero eso ya lo he probado y nada,
la aplicación esta hecha así pero el problema no es con los formularios, para que me entiendas mejor te escribiré aquí un trozo de código similar al de la app.



public Form1(string[] args)
{
InitializeComponent();

if (args.Length > 0)
CargarArchivos(args);

}

private void CargarArchivos(string[] rutas)
{
for (int i = 0; i < rutas.Length; i++)
{
Form2 newMDIChild = new Form2();
newMDIChild.pictureBox1.Image = Image.FromFile(rutas[i]);
newMDIChild.MdiParent = this;
newMDIChild.Show();
}
}
...

Esto funciona ok, el problema esta en que como son varios archivos los que se seleccionaron, windows mediante el parámetro %1 abre una instancia de la app por cada archivo seleccionado, entonces a cada app llega string[]args con longitud 1.
Lo que necesito es lograr que antes de abrir alguna instancia de la app se acumule en una lista todas las rutas y Luego llamar a la app y pasarle la lista entera de una vez.
Yo he probado de muchas formas pero no he resuelto nada hay una forma que logre hacer que es mas o menos asi:

...
if (args.Length > 0)
{
if (Process.GetProcessesByName("Nombre de mi app").Length > 1)
{
StreamWriter sw = File.AppendText(Application.StartupPath + "\\tmp");
sw.WriteLine(args[0]);
sw.Close();
sw.Dispose();
Process.GetCurrentProcess().Kill();
}
else
{
CargarArchivos File.ReadAllLines(Application.StartupPath + "\\tmp"));
File.Delete(Application.StartupPath + "\\tmp");
}
}

...

Aquí lo que hago es obtener la cantidad de instancias de mi app que se han abierto mediante Process.GetProcessesByName si es mayor que 1 escribo su argumento en un fichero temporal (siempre en el mismo) y elimino el proceso, cuando la contidad de instancias es 1 entonces dejo el proceso actual y mando leer las rutas desde el fichero.
Esta idea la he refinado un montón de veces la he pasado para el punto de entrada de la app antes de la llamada a Application.Run(new Form1()); y todos los demás iniciadores de ventanas, esta idea funciona a veces perfectamente pero a veces me da un error de que Windows no tiene memoria virtual o que la aplicación dejo de funcionar y cosas así, ninguno de estos errores son de .net todos son de Windows asi que no tengo forma de controlarlos desde mi app.