Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: [u]nsigned en 9 Octubre 2012, 18:14 pm



Título: [C#] Comunicacion entre formularios MDI
Publicado por: [u]nsigned en 9 Octubre 2012, 18:14 pm
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
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9.  
  10. namespace SistemaEmpleo
  11. {
  12.    public partial class frmMain : Form
  13.    {
  14.        FormLogin frmLogin = new FormLogin();
  15.  
  16.        public frmMain()
  17.        {
  18.            InitializeComponent();
  19.            frmLogin.MdiParent = this;
  20.            this.Bloquear();
  21.            frmLogin.Show();
  22.        }
  23.  
  24.        public void Bloquear()
  25.        {
  26.            mnuInicio.Enabled = false;
  27.        }
  28.  
  29.       public void Desloquear()
  30.        {
  31.            mnuInicio.Enabled = true;
  32.        }
  33.  
  34.    }
  35. }

frmLogin.cs:
Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9.  
  10. namespace SistemaEmpleo
  11. {
  12.    public partial class FormLogin : Form
  13.    {
  14.  
  15.        public FormLogin()
  16.        {
  17.            InitializeComponent();
  18.        }
  19.  
  20.        private void btnEntrar_Click(object sender, EventArgs e)
  21.        {
  22.            String User = txtUser.Text.ToString();
  23.            String Clave = txtClave.Text.ToString();
  24.  
  25.            this.Login(User, Clave);
  26.        }
  27.  
  28.        private void Login(String User, String Clave)
  29.        {
  30.            if (User == "admin" || Clave == "kobe")
  31.            {
  32.                // Aca deso hacer algo como 'mnuInicio.Enabled = false o 'frmMain.Desloquear()' //
  33.                ;
  34.            }
  35.        }
  36.  
  37.    }
  38. }
  39.  
  40.  


Título: Re: [C#] Comunicacion entre formularios MDI
Publicado por: Siuto en 14 Octubre 2012, 21:34 pm
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.


Título: Re: [C#] Comunicacion entre formularios MDI
Publicado por: [u]nsigned en 15 Octubre 2012, 16:29 pm
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



Título: Re: [C#] Comunicacion entre formularios MDI
Publicado por: spiritdead en 15 Octubre 2012, 22:31 pm
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



Título: Re: [C#] Comunicacion entre formularios MDI
Publicado por: [u]nsigned en 16 Octubre 2012, 13:16 pm
Econtre la mejor solucion en crear metodos publicos locales en los formularios, y luego llamarlos desde el otro form. xD


Título: Re: [C#] Comunicacion entre formularios MDI
Publicado por: Maurice_Lupin en 21 Octubre 2012, 19:36 pm
El problema al crear variables que almacenan info de seguridad, es que facilitas el parcheo de tu aplicación  :huh: .

Saludos.


Título: Re: [C#] Comunicacion entre formularios MDI
Publicado por: spiritdead en 21 Octubre 2012, 20:26 pm
y por esa razon, 1 de mis variables tube q meterle cifrado RSA u.u


Título: Re: [C#] Comunicacion entre formularios MDI
Publicado por: Maurice_Lupin en 22 Octubre 2012, 17:24 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
  1. If registrado() Then
  2.   ...
  3.   ...
  4. 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.