locked
Visual Studio Error CS0120, metodo no estático RRS feed

  • Pregunta

  • Se requiere una referencia de objeto para el campo, método o propiedad 'Form1.getAccountNumber()' no estáticos

    Hola buenas,

    estoy intentando utilizar un numero que decida el usuario como "input" desde el Windows form pero no se como solucionar el problema.

    public Account findAccount()
    {

    int input = Convert.ToInt32(Form1.getAccountNumber()); // AQUI ME PILLA EL FALLO


    for (int i = 0; i < this.ac.Length; i++)
    {
    if (ac[i].getAccountNum() == input)
    {
    return ac[i];
    }
    }

    return null;

    }
    utilizo ese for loop porque "hay tres cuentas registradas" en un array. Deberia buscar la cuenta que el usuario introduce dentro de ese array.

    En el Form1 tengo este codigo:

    private void ok_Click(object sender, EventArgs e)
    {

    //MessageBox.Show("La tarjeta es: " + accountNumber + ".");
    ac.findAccount(); 
    }

    public void account_number_TextChanged(object sender, EventArgs e)
    {
    accountNumber = Convert.ToInt32(account_number.Text);
    }

    public int getAccountNumber()
    {
    return accountNumber;
    }
    Muchas gracias.
    miércoles, 15 de marzo de 2017 14:48

Respuestas

  • Tu error es que estás tratando la clase del formulario como si fuera una instancia del formulario.

    El mero hecho de declarar la clase Form1 no hace que salga ningún formulario en tu programa. El formulario se "ve" cuando haces, por ejemplo, algo como esto: Form1 frm = new Form1(); frm.Show();

    Esas instrucciones las podrías ejecutar 5 veces, y en pantalla se verían 5 copias del Form1. Evidentemente, cuando quieres leer un dato del Form1 no basta con decir que es del Form1, hay que especificar de cuál de las 5 copias ("instancias") del Form1 quieres leerlo. ¿Y cómo se reconoce la instancia? Pues precisamente a través de esa variable que en el ejemplo hemos llamado "frm".

    En resumidas cuentas, el código que te da error, "Form1.getAccountNumber()" debes cambiarlo por "frm.getAccountNumber()", siendo "frm" la variable que usaste para instanciar el Form1. Obviamente, si esa variable es local, tendrás que copiarla y hacerle llegar la copia a la subrutina donde vas a usarla.

    • Propuesto como respuesta Sergio Parra jueves, 16 de marzo de 2017 8:13
    • Marcado como respuesta Joyce_ACModerator miércoles, 22 de marzo de 2017 15:44
    miércoles, 15 de marzo de 2017 23:45