¿Cambiar el texto de una etiqueta en otra forma en C#?

Tengo una etiqueta llamada LabelX1. Esto está en form2. En form1, tengo un botón. Quiero que el texto del botón se transfiera a la etiqueta del otro formulario. Yo he tratado

form2 frm2 = new form2();
frm2.labelX1.Text = this.button1.text;

Pero no funciona. ¿Hay una manera fácil y directa de hacer esto?

preguntado el 22 de mayo de 12 a las 15:05

¿Por qué no funciona? ¿Lo que pasa? -

¿Ya se muestra la instancia de form2? De esa manera, crea otra instancia de form2 y establece el texto de la etiqueta allí. Y esa instancia nunca se muestra (por ejemplo, Show() / ShowDialog()) -

¿Es ese tipo de pregunta de broma (desconcertado al mirar tu reputación)? -

Tenga en cuenta que es posible que no tenga experiencia en C# Winforms. -

Bueno, tengo 15 años y estoy aprendiendo...

13 Respuestas

Necesita exponer su etiqueta o su propiedad.

En forma 2:

public string LabelText
{
    get
    {
        return this.labelX1.Text;
    }
    set
    {
        this.labelX1.Text = value;
    }
}

Entonces puedes hacer:

form2 frm2 = new form2();
frm2.LabelText = this.button1.text;

contestado el 22 de mayo de 12 a las 15:05

Podrías modificar el constructor de Form2 así:

public Form2(string labelText)
{
    InitializeComponent();
    this.labelX1.Text = labelText;
}

luego crea Form2 pasando el texto:

Form2 frm2 = new Form2(this.button1.text);

contestado el 22 de mayo de 12 a las 15:05

Estoy de acuerdo en que esto funcionará, pero sería un cambio de una sola vez. Y tal vez eso sea lo suficientemente bueno para el OP. - Gris general

@K'Leg bueno, no indicaron si necesitan o no cambiarlo nuevamente ... Solo estoy brindando opciones. - eric dahlvang

Estoy de acuerdo si esto es todo lo que quiere, entonces creo que esta es la mejor respuesta. Es más fácil que crear una propiedad para la etiqueta de texto. - Gris general

O puedes hacer esto >>

((Label)frm2.Controls["labelX1"]).Text = "test";

contestado el 22 de mayo de 12 a las 15:05

dentro de form2 escribe esto

public void ChangeLabel(string s)
{
    labelX1.Text = s;
}

luego, donde creas el Formulario 2, haz esto

form2 frm2 = new form2();
frm2.ChangeLabel(this.button1.text);

contestado el 22 de mayo de 12 a las 15:05

¿Hay una manera fácil y directa de hacer esto?

La forma más fácil es hacer que labelX1 sea un miembro público de form2. El problema que tiene se debe a que desde el código Form1 form2.labelX1 no está visible. En el diseñador de form2, puede ir a las propiedades de labelX1 y establecer su visibilidad en público/interno.

Un mejor enfoque sería exponer labelX1.Text como una propiedad que se puede establecer en código fuera de la clase.

contestado el 22 de mayo de 12 a las 15:05

su respuesta aún no es correcta La visibilidad a protegido no ayudará en nada - Micah Armantrout

sí, accidentalmente escribí protegido, realmente quise decir público... ¡estaba editando mientras comentabas! - halcón

form2 frm2 = new form2();
((Label)frm2.Controls["labelX1"]).Text=button1.Text;
frm2.Show();

respondido 10 nov., 15:20

lo único que tienes que hacer es poner la etiqueta de la otra forma como pública

por ejemplo: Formulario1:

 public System.Windows.Forms.Label txtInfo;

luego en Form2

Form1 frm =new Form1();
frm.txtInfo.text="....."//you have access because is public

Respondido 31 Oct 18, 21:10

Usted puede hacer labelX1 public, y funcionará, pero hay una mejor manera de hacerlo:

http://www.codeproject.com/Articles/14122/Passing-Data-Between-Forms

Respondido 20 Feb 19, 00:02

Cambié la propiedad de mi ventana principal al siguiente código:

this.MdiParent.Controls["label1"].Text = "test";

Respondido 21 Oct 15, 15:10

Si necesita acceder al form2 desde otra parte de su código (como presionar un botón, por ejemplo), no podrá ver la instancia del formulario que creó. Para resolver eso, creo una instancia pública para mantener una referencia como:

 public form2 form2_pub;

Luego, después de crearlo, asigna el nuevo a su instancia pública:

form2 frm2 = new form2();
frm2.Show();
form2_pub = frm2

Ahora puede hacer referencia a form2_pub a lo largo de sus rutinas.

Funciona para mí al menos.

Recuerde, en su setter puede ejecutar cualquier otro código que desee. Por ejemplo, uso lo siguiente para mostrar lo que quiero en otro formulario simplemente configurando show_scanning en verdadero:

  public bool show_scanning //turns on the scanning screen
    {
        set
        {
            scanning_pnl.Visible = true;
            notReady_pnl.Visible = false;
            timer1.Enabled = true;
        }
    }

respondido 01 nov., 17:17

Generalmente los controladores son privados. Es por eso que no puede acceder desde otro formulario. Las formas mencionadas anteriormente, como pasar datos a través de parámetros, etc., son muy correctas. Hay otro método, vaya a su formulario Form2.Designer.cs

private System.Windows.Forms.Label labelX1;

Cambie 'privado' a 'público'. Ahora la etiqueta X1 es visible desde el exterior.

respondido 21 nov., 18:04

El otro enfoque es simplemente cambiar la propiedad del modificador de la etiqueta o el texto a público y ahora permite acceder al contenido del cuadro de texto del formulario 1 para etiquetar en otro formulario.

Entonces el código es

private void button1_click(){
    Form2 obj1 =new Form2();
    Obj1.show();
    Obj1.label1.text="welcome"+textbox1.Text;
}

Respondido el 17 de junio de 21 a las 11:06

¿Tienes una excepción? Puede hacer pública la propiedad en form2, con setter para establecer texto en la etiqueta, o hacer público el modificador de acceso labex1 y configurarlo directamente. Deberia de funcionar.

contestado el 22 de mayo de 12 a las 15:05

¿El error de @Killercam está claro para quién? No publicó ninguna información de error. - Val Bajtín

Si no tiene suficiente información para responder, comente en su lugar, solicite los detalles. Lo que usted ha proporcionado no es una respuesta. - Caballero de la Luna

Para algunos lo es. Establece el modificador de acceso desde un cuadro de apoyo, no un código. Pero nvm. - Val Bajtín

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.