none
Cómo acceder al control barButtonItem para deshabilitarlo desde otro formulario? RRS feed

  • Pregunta

  • Hola, estoy trabajando en 3 capas c# y tengo un formulario principal, donde en este uso el ribboncontrol y dentro de este el BarButtonItem; lo que necesito es que desde el formulario login pueda deshabilitar el BarButtonItem. no se cómo hacerlo. Este es mi codigo:
    NegUsuario User = new NegUsuario();

    public partial class Login : Form
        {
            public static FormPrincipal objHijo;
            public Login()
            {
                InitializeComponent();
                objHijo = new FormPrincipal();

            }
               private void PBIngresar_Click(object sender, EventArgs e)
            {
                DataTable tabla = new DataTable();
                FACTURA lb = new FACTURA();

                string nomb = "";
                string cargo;
                int id;

                if (txtNombre.Text != "" && txtContrasenya.Text != "")
                {
                    tabla = User.BuscarXNombreContrasenya(txtNombre.Text, txtContrasenya.Text);

                    if (tabla.Rows.Count > 0)
                    {

                        nomb = tabla.Rows[0][0].ToString();
                        cargo = tabla.Rows[0][1].ToString();
                        id = Convert.ToInt32(tabla.Rows[0][2].ToString());
                        if (cargo == "ADMINISTRADOR")
                        {
                            ((Label)objHijo.Controls["lbTextoN"]).Text = nomb;
                            ((Label)objHijo.Controls["LBid"]).Text = id.ToString();
                            objHijo.ShowDialog();
                            this.Hide();

                        }
                        else 
                        {

                            objHijo.barButtonItemUsuario.Enabled = false;    (SIEMPRE APARECE EN FALSE if(cargo == "ADMINISTRADOR")

                            ((Label)objHijo.Controls["lbTextoN"]).Text = nomb;
                            ((Label)objHijo.Controls["LBid"]).Text = id.ToString();
                            objHijo.Show();
                            this.Hide();
                        }

                    }
                    else
                    {
                        MessageBox.Show("Intente de nuevo", "*******");
                    }
    }

    Teniendo en cuenta que en las propiedades del contro modifier=public para poder acceder a él desde el otro formulario. 

    Todo lo hace bien, solo que a acceder al formulaio principal siempre me sale deshabilitado ese control. 

    Qué puedo hacer para mejorar ese código?

                                                                                                                                   

    rammyni

    sábado, 16 de mayo de 2020 19:46

Respuestas

  • Hola Ramiro

    No entiendo si FormPrincipal es el padre y Login es el hijo o viceversa, pero si tenes que acceder a miembros públicos del Form padre desde el Form hijo, es así:

    1) Al instanciar y mostrar el Form hijo, le pasas this, que es una autoreferencia al padre (el que lo instancia) en ShowDialog().

    FormHijo form = new FormHijo();

    form.ShowDialog(this);   // aquí le pasas this que es la referencia al padre

    2) En cualquier método del Form hijo, creas una referencia al Form padre

    FormPadre owner = (FormPadre)this.Owner;

    3) Luego podes acceder a cualquier miembro público del Form padre

    owner.Variable = 50;

    string str = owner.Nombre();

    Espero te sea útil.

    Saludos

    Pablo

    domingo, 17 de mayo de 2020 19:49
  • Hola Ramiro

    No entiendo ... cual es el Form padre y cual el hijo? Y a cual de los 2 if no entra?

    No hiciste como te dije de pasarle this y luego acceder a los miembros públicos del Form padre?

    martes, 19 de mayo de 2020 23:00
  • Hola!

    Oh, entonces ya pudiste solventar el problema?


    Luis Diego Mora
    ________

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

     

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

     

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    miércoles, 20 de mayo de 2020 16:50
    Moderador
  • Hola amigo, entiendo muy bien tu respuesta... Lo que necesito realmente es que al hacer ingreso al sistema por medio del formulario Login, yo pueda acceder al formulario principal restringiendo algunos controles. Todo lo hace bien, pero no entro a la condición "if" y solo entro al "else":

    Te cuento que estoy trabajando e 3 capas con sql server y procedimientos almacenados.

    private void PBIngresar_Click(object sender, EventArgs e)
            {
                NegUsuario User = new NegUsuario();
                DataTable tabla = new DataTable();
                
                string nomb = "";
                string cargo;
                int id;

                if (txtNombre.Text != "" && txtContrasenya.Text != "")
                {
                    tabla = User.BuscarXNombreContrasenya(txtNombre.Text, txtContrasenya.Text);

                    if (tabla.Rows.Count > 0)
                    {
                        nomb = tabla.Rows[0][0].ToString();
                        cargo = tabla.Rows[0][1].ToString();
                        id = Convert.ToInt32(tabla.Rows[0][2].ToString());
                        if (cargo == "ADMINISTRADOR")
                        {
                            objHijo.barButtonItem1Usuario.Enabled = true; //->Aquí me lo convierte a false                        
                            objHijo.ShowDialog();
                            this.Hide();
                        }
                        else
                        {
                            objHijo.ShowDialog();
                            objHijo.barButtonItem1Usuario.Enabled = false;
                            this.Hide();
                        }
                    }
                    else
                    {
                        MessageBox.Show("Intente de nuevo", "**AUTO REPUESTOS EDWARD'S**");
                    }
                }
                else
                {
                    MessageBox.Show("Datos Vacíos...");
                }
            }

    Por qué me pasa esto? La lectura "if (cargo == "ADMINISTRADOR")" lo lee bien y depués pasa lo explicado. gracias hermano


    rammyni

    martes, 19 de mayo de 2020 15:55

Todas las respuestas

  • Hola Ramiro

    No entiendo si FormPrincipal es el padre y Login es el hijo o viceversa, pero si tenes que acceder a miembros públicos del Form padre desde el Form hijo, es así:

    1) Al instanciar y mostrar el Form hijo, le pasas this, que es una autoreferencia al padre (el que lo instancia) en ShowDialog().

    FormHijo form = new FormHijo();

    form.ShowDialog(this);   // aquí le pasas this que es la referencia al padre

    2) En cualquier método del Form hijo, creas una referencia al Form padre

    FormPadre owner = (FormPadre)this.Owner;

    3) Luego podes acceder a cualquier miembro público del Form padre

    owner.Variable = 50;

    string str = owner.Nombre();

    Espero te sea útil.

    Saludos

    Pablo

    domingo, 17 de mayo de 2020 19:49
  • Hola amigo, entiendo muy bien tu respuesta... Lo que necesito realmente es que al hacer ingreso al sistema por medio del formulario Login, yo pueda acceder al formulario principal restringiendo algunos controles. Todo lo hace bien, pero no entro a la condición "if" y solo entro al "else":

    Te cuento que estoy trabajando e 3 capas con sql server y procedimientos almacenados.

    private void PBIngresar_Click(object sender, EventArgs e)
            {
                NegUsuario User = new NegUsuario();
                DataTable tabla = new DataTable();
                
                string nomb = "";
                string cargo;
                int id;

                if (txtNombre.Text != "" && txtContrasenya.Text != "")
                {
                    tabla = User.BuscarXNombreContrasenya(txtNombre.Text, txtContrasenya.Text);

                    if (tabla.Rows.Count > 0)
                    {
                        nomb = tabla.Rows[0][0].ToString();
                        cargo = tabla.Rows[0][1].ToString();
                        id = Convert.ToInt32(tabla.Rows[0][2].ToString());
                        if (cargo == "ADMINISTRADOR")
                        {
                            objHijo.barButtonItem1Usuario.Enabled = true; //->Aquí me lo convierte a false                        
                            objHijo.ShowDialog();
                            this.Hide();
                        }
                        else
                        {
                            objHijo.ShowDialog();
                            objHijo.barButtonItem1Usuario.Enabled = false;
                            this.Hide();
                        }
                    }
                    else
                    {
                        MessageBox.Show("Intente de nuevo", "**AUTO REPUESTOS EDWARD'S**");
                    }
                }
                else
                {
                    MessageBox.Show("Datos Vacíos...");
                }
            }

    Por qué me pasa esto? La lectura "if (cargo == "ADMINISTRADOR")" lo lee bien y depués pasa lo explicado. gracias hermano


    rammyni

    martes, 19 de mayo de 2020 15:55
  • Hola amigo, entiendo muy bien tu respuesta... Lo que necesito realmente es que al hacer ingreso al sistema por medio del formulario Login, yo pueda acceder al formulario principal restringiendo algunos controles. Todo lo hace bien, pero no entro a la condición "if" y solo entro al "else":

    Te cuento que estoy trabajando e 3 capas con sql server y procedimientos almacenados.

    private void PBIngresar_Click(object sender, EventArgs e)
            {
                NegUsuario User = new NegUsuario();
                DataTable tabla = new DataTable();
                
                string nomb = "";
                string cargo;
                int id;

                if (txtNombre.Text != "" && txtContrasenya.Text != "")
                {
                    tabla = User.BuscarXNombreContrasenya(txtNombre.Text, txtContrasenya.Text);

                    if (tabla.Rows.Count > 0)
                    {
                        nomb = tabla.Rows[0][0].ToString();
                        cargo = tabla.Rows[0][1].ToString();
                        id = Convert.ToInt32(tabla.Rows[0][2].ToString());
                        if (cargo == "ADMINISTRADOR")
                        {
                            objHijo.barButtonItem1Usuario.Enabled = true; //->Aquí me lo convierte a false                        
                            objHijo.ShowDialog();
                            this.Hide();
                        }
                        else
                        {
                            objHijo.ShowDialog();
                            objHijo.barButtonItem1Usuario.Enabled = false;
                            this.Hide();
                        }
                    }
                    else
                    {
                        MessageBox.Show("Intente de nuevo", "**AUTO REPUESTOS EDWARD'S**");
                    }
                }
                else
                {
                    MessageBox.Show("Datos Vacíos...");
                }
            }

    Por qué me pasa esto? La lectura "if (cargo == "ADMINISTRADOR")" lo lee bien y depués pasa lo explicado. gracias hermano


    rammyni

    Aquí para acceder al formulario principal

    public static FormPrincipal objHijo;
            public Login()
            {
                InitializeComponent();
                objHijo = new FormPrincipal();
                
            }

    Necesito ayuda


    rammyni

    martes, 19 de mayo de 2020 16:30
  • Hola Ramiro

    No entiendo ... cual es el Form padre y cual el hijo? Y a cual de los 2 if no entra?

    No hiciste como te dije de pasarle this y luego acceder a los miembros públicos del Form padre?

    martes, 19 de mayo de 2020 23:00
  • if (cargo == "ADMINISTRADOR") --> Lee bien al ADMINISTRADOR
                        {
                            objHijo.barButtonItem1Usuario.Enabled = false; --> Aquí no entra...
                            objHijo.button1.Enabled = false; --> Agregué otro control y tampoco
                            objHijo.ShowDialog();
                            this.Hide();
                        }

    else

                       {

                                   objHijo.button1.Enabled = true; ---> Aquí si entra

                       }

    Qué pueda estar pasando???


    rammyni

    miércoles, 20 de mayo de 2020 0:09
  • Estuve perdiendo mucho tiempo en algo que parece insignificante pero es un desastre por la perdida de tiempo. Ahí estaba el problema "base de datos y que sea un char en lugar de un varchar"

    rammyni

    miércoles, 20 de mayo de 2020 16:31
  • Hola!

    Oh, entonces ya pudiste solventar el problema?


    Luis Diego Mora
    ________

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

     

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

     

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    miércoles, 20 de mayo de 2020 16:50
    Moderador