es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Dónde debo colocar una matriz para que sea accesible a los controles de formulario de Windows?

Estoy trabajando en una aplicación de Windows Forms en C# para administrar una colección de juegos de cartas coleccionables.

Tengo una clase llamada Card y estoy tratando de crear un arreglo de objetos de tipo Card para representar cada carta del conjunto. A partir de ahí, me gustaría poder buscar y mostrar los detalles de la carta en los cuadros de texto, etiquetas, picturebox, etc. del formulario.

He intentado colocar el arreglo tanto en form1.cs como en program.cs, tanto dentro como fuera de diferentes clases. El único lugar donde el arreglo parece estar en alcance para el controlador del evento de clic es cuando se declara dentro de él.

¿Dónde puedo inicializar este arreglo para que sea accesible en todo el programa y esté en alcance para los controladores de eventos del formulario? Soy muy nuevo en la programación orientada a objetos con Windows Forms.

El constructor de la clase Card toma un parámetro int y inicializa el “número de coleccionista”.

El constructor de Card toma un parámetro int solo para establecer el número de conjunto. Después de esto, los objetos de carta son accesibles y puedo establecer sus campos… sin embargo, aquí abajo:

private void button1_Click(object sender, EventArgs e)
{
    //botón de prueba
    DisplayCard(Set[0]);   //error: el nombre 'set' no existe en el contexto actual
}

public void DisplayCard(Card selectedCard)
{
    myDCollectorNoTB.Text = selectedCard.CollectorNum.ToString();
    myDNameTB.Text = selectedCard.Name.ToString();
    myDRarityTB.Text = selectedCard.CardRarity.ToString();
    myDCostTB.Text = selectedCard.Cost.ToString();    
}

El constructor de Card toma un parámetro int solo para establecer el número de conjunto. Después de esto, los objetos de carta son accesibles y puedo establecer sus campos… sin embargo, aquí abajo:

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para poder acceder al arreglo Card en todo el programa y dentro del alcance de los manejadores de eventos del formulario, necesitas mover su declaración fuera del constructor de Form1 y convertirlo en una variable de nivel de clase.

    Para hacer eso, declara el arreglo Card justo después de la declaración de la clase Form1, de esta forma:

    public partial class Form1 : Form
    {
        private const int NumberOfCardsInSet = 3;
        private Card[] Set;
    
        public Form1()
        {
            InitializeComponent();
    
            Set = new Card[NumberOfCardsInSet];
            for (int iii = 0; iii < NumberOfCardsInSet; iii++)
            { 
                Set[iii] = new Card(iii + 1); 
            }
        }
    
        // tus otros manejadores de eventos y métodos van aquí
    
    }
    

    De esta manera, el arreglo Set es accesible en toda la clase Form1, y está dentro del alcance de todos los manejadores de eventos y métodos definidos en su interior, incluyendo el método button1_Click.

    Ten en cuenta que, dado que el arreglo Set ahora es una variable de nivel de clase y no una variable local dentro del constructor de Form1, ya no necesitas preceder su nombre con la palabra clave “const”.

    Una vez que hagas este cambio en tu código, el mensaje de error “name ‘Set’ doesn’t exist in current context” debería desaparecer y tu método DisplayCard debería funcionar como se espera.

Comments are closed.