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";
}
}
}
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 propiedadName
del botón. Como ha nombrado sus etiquetas como “test1”, “test2”, etc., puede extraer el número del nombre del botón usandoSubstring
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étodobtn_click
para cambiar el texto apropiado de la etiqueta:En este método modificado, primero convertimos el objeto
sender
a unButton
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ónControls
del formulario. Finalmente, simplemente establecemos la propiedadText
de la etiqueta en el valor deseado. Tenga en cuenta que no necesitamos crear un nuevo objetoLabel
como lo estaba haciendo en su código original; solo necesitamos modificar la etiqueta existente que se creó cuando se inicializó el formulario.