• Domingo 22 de Diciembre de 2024, 09:36

Autor Tema:  Formulario en DLL  (Leído 2662 veces)

totorufo

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Formulario en DLL
« en: Miércoles 11 de Noviembre de 2009, 11:34 »
0
Hola,

Estoy aprendiendo poco a poco C# y tengo una dudilla:

He creado un formulario dentro de una DLL.       -> FormularioDLL
 Y he creado otro formulario en mi aplicacion      -> FormularioAplicacion

Desde FormularioAplicacion llamo al formulario FormularioDLL como modal, la cosa es, que una vez que el usuario
cierra el FormularioDLL quiero actualizar informacion del FormularioAplicacion.

Es decir, como puedo saber que el formularioDLL se ha cerrado?
O si es posible hacerlo.

Gracias.

tannke

  • Miembro MUY activo
  • ***
  • Mensajes: 152
  • Nacionalidad: es
    • Ver Perfil
Re: Formulario en DLL
« Respuesta #1 en: Miércoles 11 de Noviembre de 2009, 21:24 »
0
bueno no estoy seguro del todo ni siquiera habia provado nunca de meter un formulario en dll, por lo que deberias provar...

supongo que para habrir el formularioDll creas un objeto de el tipo:

FormularioDLL formdll= new FormularioDLL();
formdll.show();

veo 2 soluciones:

una seria combrovar manualmente (no se si funcionaria) donde una vez cerrado

algo como if(fromdll==null) { //el formulario esta cerrado}

la otra seria crear en tu dll un delegado y un evento, que al cerrar el form disparara ese evento.
y tu donde el formulario "padre" darte de "alta" (no recuerdo la palabra) en ese evento para que se dispare cuando cierres el Formdll. No se si me he explicado muy bien con esto pero de dejo un link donde puedes ver como crear el delegado y evento:

http://social.msdn.microsoft.com/Forums/es-ES/vcses/thread/dc4fed66-05a8-4377-bce3-8cc04f1fe94b

espero ti sirva, saludos

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Formulario en DLL
« Respuesta #2 en: Miércoles 11 de Noviembre de 2009, 22:51 »
0
Cita de: "tannke"
la otra seria crear en tu dll un delegado y un evento, que al cerrar el form disparara ese evento.
y tu donde el formulario "padre" darte de "alta" (no recuerdo la palabra) en ese evento para que se dispare cuando cierres el Formdll.

Justamente iba a sugerir eso, pero ademas te dire que no es necesario crearlo, porque ya existe, el evento se llama FormClosed, y se genera justo cuando ya se cerro el formulario. Tambien existe el evento FormClosing, que se genera antes de que se cierre realmente el formulario, muy util para cancelar el cierre o realizar alguna accion antes de cerrar definitivamente el formulario, por ejemplo, si estas haciendo un editor de texto, y quieres que aparezca un mensaje para guardar los cambios de tu archivo antes de cerrar el programa ;)

A continuacion las direcciones dende encontraras mas informacion

FormClosing

FormClosed

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

totorufo

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: Formulario en DLL
« Respuesta #3 en: Jueves 12 de Noviembre de 2009, 13:21 »
0
Ole! Muy buena!

Gracias a los dos por vuestras respuestas.

Habia hecho algo pero no tan bonito y ha quedado asi:

(Formulario Aplicacion con un boton, al pulsarlo se abre otro con dos botones ACEPTAR y CANCELAR, y textBox.
Si el usuario introduce un texto en el formulario y le da a aceptar, este se cierra y en el titulo del primer formulario
sale en el titulo el texto introducido)

Formulario en DLL:  -----------------------------------------------

namespace hola
{
    public class Hola
    {
        private String m_hola;  // Parametro a pasar de un formulario a otro
        private bool m_anser;  // Booleano que dice si se a dado ACEPTAR o NO

        public Hola()
        {
            m_hola = "Hola";
            m_anser = false;
        }
        public bool anser
        {
            get { return m_anser; }
            set { m_anser = value; }
        }
        public String hola
        {
            get { return m_hola; }
            set { m_hola = value; }
        }
    }
}

namespace hola
{
    public partial class Form1 : Form
    {
        private Hola m_hola = new Hola();

        public Form1()
        {
            InitializeComponent();
        }

        public void SetText(Hola m)
        {
            m_hola = m;
            textBox1.Text = m_hola.hola;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            m_hola.hola = textBox1.Text;
            m_hola.anser = true;
            this.Close();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            m_hola.anser = false;
            this.Close();
        }
    }
}

Formulario en aplicacion:  -----------------------------------------------

using hola;

namespace Adios
{
    public partial class Form1 : Form
    {
        private Hola m_hola = new Hola();

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.m_hola.hola = "XXXX";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            hola.Form1 fo = new hola.Form1();
            fo.FormClosed += new FormClosedEventHandler(SeCierra);
            fo.SetText(this.m_hola);
            fo.ShowDialog();

            // if (this.m_hola.anser) this.Text = this.m_hola.hola; <-- Lo mio: Al ser modal se quedaba aqui hasta que se cerraba,
           //                                                                                     pero me parece que con no modal....
        }

        private void SeCierra(object sender, EventArgs e)
        {
            if (this.m_hola.anser) this.Text = this.m_hola.hola;
        }
    }
}

--------------------------------------------------------------------------------------------------
Y como bien dice ProfesorX con esto voy a poder hacer pequeños formularios separados de mi aplicacion
para no ver tanto formulario junto  :)

Muchas gracias.