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.

Cómo cambiar el texto de una etiqueta creada dinámicamente en una aplicación de formularios de Windows C# al hacer clic en un botón creado dinámicamente.

Estoy tratando de crear algunas etiquetas y botones dinámicamente. Quiero cambiar el nombre de la etiqueta en el clic del botón creado dinámicamente. Cuando escribo el método de clic del botón, no puedo acceder directamente al objeto de la etiqueta. ¿Cómo puedo hacerlo?

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 DemoPanel
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            int lblYVal = 10;
            int btnYVal = 50;

            for (int i = 1; i < 5; i++)
            {
                Label lbl = new Label();
                lbl.Text = "prueba";
                lbl.Name = "test" + i.ToString();
                lbl.Location = new System.Drawing.Point(10, lblYVal);
                lbl.Visible = true;

                Button btn = new Button();
                btn.Text = "Haz clic";
                btn.Name = "textBtn" + i.ToString();
                btn.Location = new System.Drawing.Point(10, btnYVal);
                btn.Visible = true;

                btn.Click += new EventHandler(this.btn_click);


                this.Controls.Add(lbl);
                this.Controls.Add(btn);
                lblYVal += 70;
                btnYVal += 70;


            }

        }

        void btn_click(object sender, EventArgs e)
        {
            //¿Cómo puedo cambiar el texto de la etiqueta desde aquí?
            //lbl.text //Error no existe.
            Button button = sender as Button;
            int index = Int32.Parse(button.Name.Replace("textBtn", "")) - 1;
            string labelName = "test" + (index + 1).ToString();
            Label lbl = (Label)this.Controls.Find(labelName, true)[0];
            lbl.Text = "Nuevo texto";
        }
    }
}
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para cambiar el texto de la etiqueta desde el método btn_click, primero debe determinar qué etiqueta corresponde al botón que se ha hecho clic. Esto se puede hacer inspeccionando la propiedad Name del botón. Como ha nombrado sus etiquetas como “test1”, “test2”, etc., puede extraer el número del nombre del botón usando Substring y luego construir el nombre de la etiqueta concatenando “test” con ese número. Aquí hay un ejemplo de cómo puede modificar el método btn_click para cambiar el texto apropiado de la etiqueta:

    void btn_click(object sender, EventArgs e)
    {
        Button clickedButton = (Button) sender;
        int labelNumber = Int32.Parse(clickedButton.Name.Substring(7)); // extraer el número del nombre del botón
        Label clickedLabel = (Label) Controls["test" + labelNumber]; // encontrar etiqueta correspondiente por nombre
    
        clickedLabel.Text = "Nuevo texto";
    }
    

    En este método modificado, primero convertimos el objeto sender a un Button ya que sabemos que siempre será un botón que activa este método. Extraemos el número del nombre del botón obteniendo la subcadena comenzando desde el índice 7 (es decir, después de “textBtn”). Luego usamos este número para construir el nombre de la etiqueta correspondiente y encontrarla en la colección Controls del formulario. Finalmente, simplemente establecemos la propiedad Text de la etiqueta en el valor deseado. Tenga en cuenta que no necesitamos crear un nuevo objeto Label como lo estaba haciendo en su código original; solo necesitamos modificar la etiqueta existente que se creó cuando se inicializó el formulario.

Comments are closed.