[C#] Comunicacion entre formularios MDI

Iniciado por [u]nsigned, 9 Octubre 2012, 18:14 PM

0 Miembros y 1 Visitante están viendo este tema.

[u]nsigned

Hoa, bueno tengo dos formularios. Uno es frmMain que es el contenedor MDI, y un formulario frmLogin que es mdi child del primero.

frmMain tambien tiene un menu tipo MenuStrip. Cuando inicio la aplicacion invalido el menu. La idea es que cuando el usuario ponga el password y usuario correcto en el formulario frmLogin este se cierre, y habilite nuevamente el menu de frmMain. Lo que no se es como llamar a metodos del elemento menu, que esta en el formularo frmMain, desde un boton en frmLogin...no se si me explico? xD

frmMain.cs:
Código (csharp) [Seleccionar]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace SistemaEmpleo
{
    public partial class frmMain : Form
    {
        FormLogin frmLogin = new FormLogin();

        public frmMain()
        {
            InitializeComponent();
            frmLogin.MdiParent = this;
            this.Bloquear();
            frmLogin.Show();
        }

        public void Bloquear()
        {
            mnuInicio.Enabled = false;
        }

       public void Desloquear()
        {
            mnuInicio.Enabled = true;
        }

    }
}


frmLogin.cs:
Código (csharp) [Seleccionar]

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace SistemaEmpleo
{
    public partial class FormLogin : Form
    {

        public FormLogin()
        {
            InitializeComponent();
        }

        private void btnEntrar_Click(object sender, EventArgs e)
        {
            String User = txtUser.Text.ToString();
            String Clave = txtClave.Text.ToString();

            this.Login(User, Clave);
        }

        private void Login(String User, String Clave)
        {
            if (User == "admin" || Clave == "kobe")
            {
                // Aca deso hacer algo como 'mnuInicio.Enabled = false o 'frmMain.Desloquear()' //
                ;
            }
        }

    }
}


No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!

Siuto

La habilitación/deshabilitación del menú no la tenes que hacer desde el formulario de login, tenes que hacer que el formulario de login devuelva un respuesta al formulario principal y dependiendo de la respuesta que el form principal habilite o no el menú.

Las respuestas pueden ser un DialogResult o podes generar alguna propiedad al formulario de login para que una vez termine su ejecución puedas consultarla desde el formulario principal.

[u]nsigned

#2
Gracias por responder. Pero si o si hay que usar 'hacks', es decir no hay una forma trasparente y nativa de acceder a objetos entre formularios?  :huh:

Estuve haciendo unas pruebas. Lo primero que note es que desde un mdicotainer no se puede invocar un dialog.

Pero volviendo al tema, en el formulario que uso como Dialog tengo un boton btnOk que tiene la propiedad DialogResult=Yes. Es posible evitar que cuando lo clickeo el dialogo se cierre automaticamente. Es decir me gustaria hacer algunas operaciones, y luego decidir yo si cierro o no el dialog form. Algo asi como el preventDefault de jQuery.

Saludos


No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!

spiritdead

la verdad es que no se porque se enrollan tanto
primero, los formularios son creados dinamicamente o son Forms prediseñados ?

para obtener acceso a una variable de otra form debes usar la nomenclatura(VBNET)

PUBLIC variable as tipo-de-variable

al ser 1 variable publica puedes acceder a ella desde cualquier parte de tu proyecto haciendo referencia

class.nombre-de-variable.accion-etc

Facilitador De Tareas - Task Simplifier (FDT)

[u]nsigned

Econtre la mejor solucion en crear metodos publicos locales en los formularios, y luego llamarlos desde el otro form. xD

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!

Maurice_Lupin

El problema al crear variables que almacenan info de seguridad, es que facilitas el parcheo de tu aplicación  :huh: .

Saludos.
Un error se comete al equivocarse.

spiritdead

y por esa razon, 1 de mis variables tube q meterle cifrado RSA u.u
Facilitador De Tareas - Task Simplifier (FDT)

Maurice_Lupin

Cita de: spiritdead en 21 Octubre 2012, 20:26 PM
y por esa razon, 1 de mis variables tube q meterle cifrado RSA u.u

Aún así, si haces una comprobación como esta:

Código (vbnet) [Seleccionar]
If registrado() Then
   ...
   ...
End If


Cualquier función que devuelva Boolean o una comprobación con If, es fácil parcharla, me está jodiend esto de los parchadores que luego comercializan con descaro   >:(

Saludos.
Un error se comete al equivocarse.