Error: Se requiere una referencia de objeto para el campo...

Iniciado por RevolucionVegana, 11 Abril 2017, 23:08 PM

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

RevolucionVegana

Hola a todos os cuento tengo un form que tiene un boton y un datagridview el caso es que cuando le das al boton se abre una ventanita con un datagridview, seleccionamos la casilla que queramos y le damos clic en el boton "Aceptar" cuando le damos clic en aceptar mi idea es que se ejecute un método del form principal y posteriormente se cierre la pequeña ventana, básicamente lo que hace ese método es rellenar el dataGridView de la ventana principal, el problema es que me da el siguiente error:

CitarSe requiere una referencia de objeto para el campo, método o propiedad 'PanelGeneral.abrimosPresupesto()' no estáticos

PanelGeneral es el nombre del objeto que hace de form principal y abrimosPresupuesto() es un método public void que está en PanelGeneral pero que no se ha inicializado, alguien puede echarme una mano con esto, es que me tiene un poco amargado ese mensaje de error y cuando he conseguido que funcione, el caso es que he probado que cuando se de clic en Aceptar se cree un objeto de la clase PanelGeneral llamado prueba aquí funciona pero no funciona, me explico he puesto un MessageBox.Show() de prueba y me lo abre pero claro como tengo que afectar a un datagridview que está en un objeto diferente pues eso que es lo que me interesa no me lo hace.

En fin alguien me puede echar una mano :S?

Gracias y saludos
HAS DICHO ALGO NENAAAAAA?!

Eleкtro

#1
Hola.

Cita de: RevolucionVegana en 11 Abril 2017, 23:08 PMPanelGeneral es el nombre del objeto que hace de form principal y abrimosPresupuesto() es un método public void que está en PanelGeneral pero que no se ha inicializado

Tú mismo te estás dando la solución: Para poder llamar al método de instancia abrimosPresupuesto() primero debes crear una instancia de la clase donde hayas definido ese método. Eso es lo que te está intentando decir ese mensaje de error:

Código (csharp) [Seleccionar]
public class Class1 {
   public Class1() {}
   public void abrimosPresupuesto() {}
}


Código (csharp) [Seleccionar]
Class1 instance = new Class1();
instance.abrimosPresupuesto();


No hay otra manera, un método de instancia es un método de instancia.

En el caso de que el método abrimosPresupuesto() lo hayas esrito con la intención de poder llamarlo de forma global/rehutilizable, entonces la alternativa sería modificar la accesibilidad de dicho método para poder llamarlo sin instanciar la clase; para ello le asignarías el modificador de acceso static:

Código (csharp,3) [Seleccionar]
public class Class1 {
   public Class1() {}
   public static void abrimosPresupuesto() {}
}


Código (csharp) [Seleccionar]
Class1.abrimosPresupuesto();

...Esto te lo expliqué por encima en el código que compartí en este otro post:

¡Saludos!








RevolucionVegana

Vale gracias al final lo hice de otra forma en plan sin ventanear la verdad que para el próximo proyecto voy a intentar hacer el código más limpio prácticamente todos mis problemas están viniendo de un código desordenado, un desastre vamos.

Saludos
HAS DICHO ALGO NENAAAAAA?!