Ayuda con Error tratando de mostrar el valor de una propiedad de un objeto en un label
Publicado por Guardia (1 intervención) el 02/04/2018 20:44:25
Hola, como va? Soy nuevo en todo esto y estoy aprendiendo con tutoriales y demás a programar en C#.
Estoy teniendo unos errores que no estoy pudiendo resolver y agradecería muchísimo que me ayuden ^_^.
Tengo un problema para resolver de una simulación de atención de cajas de un supermercado. Lo pude resolver de la forma que indicaba el tutorial, creando una clase Caja, y luego haciendo todo el proceso de simulación en el evento de clic de un botón de Windows Form, para que me lo mostrara en los label correspondiente.
Pero me pareció en realidad que lo ideal sería tener dos clases, una Clase Caja con las propiedades de las cajas, y luego una clase "AtencionCajas" que tuviera como atributos -creo que se dicen atributos :p - 3 objeto 'caja', y luego en sus métodos todo el proceso, para luego llamar o invocar esos métodos para mostrar los resultados en los label directamente al apretar el botón. De esta manera, si tuviera varios supermercados (aunque no era el problema) no tenía que codificar todos los procesos de nuevo, y simplemente creando un objeto atencioncajas nuevo, obtener los resultados.
Ahí me encontré con los inconvenientes que voy a poner, aunque simplifiqué todo este problema para mostrar solamente el estado de la caja de distintas maneras, a ver si podía resolver el problema. Pero no pude, y por estoy aca :p.
Voy a poner esta versión simple, ya que resolviendo esto, podría resolver lo que indicaba arriba.
Tengo un Windows Forms, con un botón (button1). Tiene 3 label. Al presionar el botón, cada label me tendría que mostrar el estado de la caja. Los 3 label de aca los hice para probar las distintas maneras de poder obtenerlo.
El proyecto esta compuesto por el Form1.cs compuesto por lo indicado arriba. Y luego hay un Caja.cs donde está la caja definida con lo que sería una lista tipo cola (pero aca no la estaría usando para nada todavía) y lo que me interesa para el inconveniente, con la propiedad 'estado'.
Luego está AtencionCajas.cs que tiene un objeto de la clase Caja, y lo crea en el constructor. Y el método que cree para probar, como indico ahora:
El label1, es creando la caja directamente al hacer clic en el botón, y muestro la propiedad estado de la misma. Aca sale ok.
Las otras dos opciones son las que me tiran error y no puedo resolver y no se como darle la vuelta para hacerlas de esta manera.
En el label2 lo que quise hacer (y no me salio :p) es mostrar la propiedad del objeto caja2 , que debería haberse creado al crear el objeto at1 que lo contiene (o este fue mi razonamiento). Acá me tira: "El nombre 'caja2' no existe en el contexto actual"
En el label3 se me ocurrió hacer un método dentro de la clase AtencionCajas que retornara el estado de la "caja2" que crea la clase 'padre'. Acá me tira: Error CS0119 'AtencionCajas.EstadoCaja2()' es método, que no es válida en el contexto indicado WindowsFormsApp3 C:\Users\Guardia\source\repos\WindowsFormsApp3\WindowsFormsApp3\Form1.cs 27 Activo
Les dejo el código:
Caja.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WindowsFormsApp3
{
class Caja
{
class Nodo
{
public int info;
public Nodo sig;
}
private Nodo raiz,fondo;
private int estado;
public int Estado
{
set
{
estado = value;
}
get
{
return estado;
}
}
public Caja()
{
raiz = null;
fondo = null;
estado = 0;
}
public bool Libre()
{
if (estado == 0)
return true;
else
return false;
}
public bool Vacia()
{
if (raiz == null)
return true;
else
return false;
}
public void Insertar(int info)
{
Nodo nuevo = new Nodo();
nuevo.info = info;
nuevo.sig = null;
if(Vacia())
{
fondo = nuevo;
raiz = nuevo;
}
else
{
fondo.sig = nuevo;
fondo = nuevo;
}
}
public int Extraer()
{
if (!Vacia())
{
int informacion = raiz.info;
if (raiz == fondo)
{
raiz = null;
fondo = null;
}
else
{
raiz = raiz.sig;
}
return informacion;
}
else
return int.MaxValue;
}
}
}
AtencionCajas.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WindowsFormsApp3
{
class AtencionCajas
{
private Caja caja2;
public AtencionCajas()
{
caja2 = new Caja();
}
public int EstadoCaja2()
{
return caja2.Estado;
}
}
}
Form1.cs*:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Caja caja1 = new Caja();
AtencionCajas at1 = new AtencionCajas();
label1.Text = caja1.Estado.ToString();
label2.Text = caja2.Estado.ToString();
label3.Text = at1.EstadoCaja2.ToString();
}
}
}
Los errores:
la línea del label2:
Gravedad Código Descripción Proyecto Archivo Línea Estado suprimido
Error CS0103 El nombre 'caja2' no existe en el contexto actual WindowsFormsApp3 C:\Users\Guardia\source\repos\WindowsFormsApp3\WindowsFormsApp3\Form1.cs 26 Activo
la línea del label3
Gravedad Código Descripción Proyecto Archivo Línea Estado suprimido
Error CS0119 'AtencionCajas.EstadoCaja2()' es método, que no es válida en el contexto indicado WindowsFormsApp3 C:\Users\Guardia\source\repos\WindowsFormsApp3\WindowsFormsApp3\Form1.cs 27 Activo
Bueno, espero haber sido claro y no haber escrito tanto!! Agredezco por la ayuda que me puedan dar!!!
Estoy teniendo unos errores que no estoy pudiendo resolver y agradecería muchísimo que me ayuden ^_^.
Tengo un problema para resolver de una simulación de atención de cajas de un supermercado. Lo pude resolver de la forma que indicaba el tutorial, creando una clase Caja, y luego haciendo todo el proceso de simulación en el evento de clic de un botón de Windows Form, para que me lo mostrara en los label correspondiente.
Pero me pareció en realidad que lo ideal sería tener dos clases, una Clase Caja con las propiedades de las cajas, y luego una clase "AtencionCajas" que tuviera como atributos -creo que se dicen atributos :p - 3 objeto 'caja', y luego en sus métodos todo el proceso, para luego llamar o invocar esos métodos para mostrar los resultados en los label directamente al apretar el botón. De esta manera, si tuviera varios supermercados (aunque no era el problema) no tenía que codificar todos los procesos de nuevo, y simplemente creando un objeto atencioncajas nuevo, obtener los resultados.
Ahí me encontré con los inconvenientes que voy a poner, aunque simplifiqué todo este problema para mostrar solamente el estado de la caja de distintas maneras, a ver si podía resolver el problema. Pero no pude, y por estoy aca :p.
Voy a poner esta versión simple, ya que resolviendo esto, podría resolver lo que indicaba arriba.
Tengo un Windows Forms, con un botón (button1). Tiene 3 label. Al presionar el botón, cada label me tendría que mostrar el estado de la caja. Los 3 label de aca los hice para probar las distintas maneras de poder obtenerlo.
El proyecto esta compuesto por el Form1.cs compuesto por lo indicado arriba. Y luego hay un Caja.cs donde está la caja definida con lo que sería una lista tipo cola (pero aca no la estaría usando para nada todavía) y lo que me interesa para el inconveniente, con la propiedad 'estado'.
Luego está AtencionCajas.cs que tiene un objeto de la clase Caja, y lo crea en el constructor. Y el método que cree para probar, como indico ahora:
El label1, es creando la caja directamente al hacer clic en el botón, y muestro la propiedad estado de la misma. Aca sale ok.
Las otras dos opciones son las que me tiran error y no puedo resolver y no se como darle la vuelta para hacerlas de esta manera.
En el label2 lo que quise hacer (y no me salio :p) es mostrar la propiedad del objeto caja2 , que debería haberse creado al crear el objeto at1 que lo contiene (o este fue mi razonamiento). Acá me tira: "El nombre 'caja2' no existe en el contexto actual"
En el label3 se me ocurrió hacer un método dentro de la clase AtencionCajas que retornara el estado de la "caja2" que crea la clase 'padre'. Acá me tira: Error CS0119 'AtencionCajas.EstadoCaja2()' es método, que no es válida en el contexto indicado WindowsFormsApp3 C:\Users\Guardia\source\repos\WindowsFormsApp3\WindowsFormsApp3\Form1.cs 27 Activo
Les dejo el código:
Caja.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WindowsFormsApp3
{
class Caja
{
class Nodo
{
public int info;
public Nodo sig;
}
private Nodo raiz,fondo;
private int estado;
public int Estado
{
set
{
estado = value;
}
get
{
return estado;
}
}
public Caja()
{
raiz = null;
fondo = null;
estado = 0;
}
public bool Libre()
{
if (estado == 0)
return true;
else
return false;
}
public bool Vacia()
{
if (raiz == null)
return true;
else
return false;
}
public void Insertar(int info)
{
Nodo nuevo = new Nodo();
nuevo.info = info;
nuevo.sig = null;
if(Vacia())
{
fondo = nuevo;
raiz = nuevo;
}
else
{
fondo.sig = nuevo;
fondo = nuevo;
}
}
public int Extraer()
{
if (!Vacia())
{
int informacion = raiz.info;
if (raiz == fondo)
{
raiz = null;
fondo = null;
}
else
{
raiz = raiz.sig;
}
return informacion;
}
else
return int.MaxValue;
}
}
}
AtencionCajas.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WindowsFormsApp3
{
class AtencionCajas
{
private Caja caja2;
public AtencionCajas()
{
caja2 = new Caja();
}
public int EstadoCaja2()
{
return caja2.Estado;
}
}
}
Form1.cs*:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Caja caja1 = new Caja();
AtencionCajas at1 = new AtencionCajas();
label1.Text = caja1.Estado.ToString();
label2.Text = caja2.Estado.ToString();
label3.Text = at1.EstadoCaja2.ToString();
}
}
}
Los errores:
la línea del label2:
Gravedad Código Descripción Proyecto Archivo Línea Estado suprimido
Error CS0103 El nombre 'caja2' no existe en el contexto actual WindowsFormsApp3 C:\Users\Guardia\source\repos\WindowsFormsApp3\WindowsFormsApp3\Form1.cs 26 Activo
la línea del label3
Gravedad Código Descripción Proyecto Archivo Línea Estado suprimido
Error CS0119 'AtencionCajas.EstadoCaja2()' es método, que no es válida en el contexto indicado WindowsFormsApp3 C:\Users\Guardia\source\repos\WindowsFormsApp3\WindowsFormsApp3\Form1.cs 27 Activo
Bueno, espero haber sido claro y no haber escrito tanto!! Agredezco por la ayuda que me puedan dar!!!
Valora esta pregunta
0