none
mandar parámetros a la clase program RRS feed

  • Pregunta

  • Verán estoy haciendo un punto de venta y una de sus funcionalidades es que le permite al usuario elegir si se puede iniciar sesión o no, es decir, dependiendo de la configuración la pantalla principal sera la de login o directamente el programa. El problema viene al tratar de mandarle un parámetro a la clase program.

    Los códigos son:

    private void BtnHabilitar_Click(object sender, EventArgs e)
            {
                MessageBox.Show("El inicio de sesión ahora esta habilitado", "Inicio de sesión", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                this.Hide();
                iniciar = true;
                Program fr = new Program(iniciar);
            }

            private void BtnDeshabilitar_Click(object sender, EventArgs e)
            {
                MessageBox.Show("El inicio de sesión ahora esta deshabilitado", "Inicio de sesión", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                this.Hide();
                iniciar = false;
                Program fr = new Program(iniciar);
            }

    Y el Main es:

    static class Program
        {
            /// <summary>
            /// Punto de entrada principal para la aplicación.
            /// </summary>
            [STAThread]
            static void Main(bool inicio)
            {
                if (inicio == false)
                {
                    Application.EnableVisualStyles();
                    Application.SetCompatibleTextRenderingDefault(false);
                    Application.Run(new PuntoVenta());
                }
                else
                {
                    Application.EnableVisualStyles();
                    Application.SetCompatibleTextRenderingDefault(false);
                    Application.Run(new inicioSesion());
                }
                
            }


    jueves, 16 de mayo de 2019 14:52

Todas las respuestas

  • Cuando haces  new Program(iniciar) ese "iniciar" se envía al constructor de Program. Para que eso funcione, necesitas agragar en Program un constructor que acepte ese parámetro, ya que el constructor predeterminado que genera el compilador no recibe ningún parámetro.

    En el momento en que añadas un constructor con parámetro, el compilador deja de generar el constructor predeterminado, por lo que si necesitas ambos (con y sin parámetro) hay que escribir los dos.

    PERO: En el caso de tu clase Program no puedes hacerlo, debido a que la clase program está marcada como static. Esto implica que no se puede instanciar, y por tanto es ilegal hacer "new Program(...)".

    Así que tendrás que replantear el diseño de tu programa. Con una clase estática no se pueden pasar parámetros en la forma en la que quieres pasarlos.

    jueves, 16 de mayo de 2019 15:36