Cambiar el texto de la etiqueta al hacer clic en el botón en una forma diferente

Tengo 3 botones, para este caso llámelos botón 1, 2 y 3. Luego tengo una forma diferente en la misma solución, con una etiqueta. Lo que quiero tener es que cuando se presiona cada botón, el label.text necesita cambiar en la otra forma.

Como por ejemplo: Cuando: – Botón 1: Texto de la etiqueta = 1 – Botón 2: Texto de la etiqueta = 2 – Botón 3: Texto de la etiqueta = 3

Puede usar la colección Application.OpenForms y agregar un método simple a cada uno de sus formularios que requiera el cambio

En el botón haga clic en Añadir.

foreach (Form f in Application.OpenForms) { if(f Is Form1) (f as Form1).ChangeLabel("NewText 1"); else if (f is Form2) (f as Form2).ChangeLabel("NewText 2"); else if (f is Form3)) (f as Form3).ChangeLabel("NewText 3"); } 

En cada formulario que desee cambiar agregue (ejemplo para Form1)

 .... other code inside your Form1,Form2,Form3 classes... public void ChangeLabel(string newText) { this.Label1.Text = newText; } .... other code inside your Form1,Form2,Form3 classes... 

(Por supuesto, debe cambiar Form1, Form2, Form3 a los nombres reales de las clases que implementan sus formularios y Label1 al nombre exacto de la etiqueta para cambiar)

También puedes hacer públicas tus tags y usar una syntax como

 (f as Form1).Label1 = "New Text 1"; 

pero usualmente prefiero dejar los controles alojados por el formulario que no son visibles desde el código externo.

EDITAR

Mirando el comentario a continuación, entiendo que tiene un formulario con tres botones y un formulario con una etiqueta. Y desea cambiar la etiqueta al hacer clic en estos botones

Luego, el código sería el siguiente (Establezca cada botón, haga clic en evento en el mismo controlador de eventos que usa el diseñador. En este ejemplo lo llamaré ChangeLabel_Click

 protected void ChangeLabel_Click(object sender, EventArgs e) { Button btn = sender as Button; SecondFormType f = Application.OpenForms.OfType().FirstOrDefault(); if(f != null) { if(btn.Name == "Button1") f.ChangeLabel("NewText 1"); else if(btn.Name == "Button2") f.ChangeLabel("NewText 2"); else if(btn.Name == "Button3") f.ChangeLabel("NewText 3"); } } 

Editar 2

El código anterior toma la primera forma de SecondType, por lo que si tiene más de una instancia abierta de SecondType, necesita un bucle para cambiar cada instancia de formulario

 protected void ChangeLabel_Click(object sender, EventArgs e) { Button btn = sender as Button; foreach(SecondFormType f in Application.OpenForms.OfType()) { if(btn.Name == "Button1") f.ChangeLabel("NewText 1"); else if(btn.Name == "Button2") f.ChangeLabel("NewText 2"); else if(btn.Name == "Button3") f.ChangeLabel("NewText 3"); } } 

Yo usaría un poco de jQuery para esto

 $("#button1").on('click', function(){ $("#label").empty().append("1"); }); $("#button2").on('click', function(){ $("#label").empty().append("2"); }); $("#button3").on('click', function(){ $("#label").empty().append("3"); }); 

y su etiqueta en html debería ser algo así como

  

Probablemente se haya perdido algo, pero dada la falta de lenguaje, espero que te dé una idea de lo que quieres hacer 🙂

Puedes usar un evento de delegado como este:

en tu formulario con tus botones crea un DelegateEvent

 //Create a delegate public delegate void ButtonClickToOtherForm(object sender, EventArgs e); public partial class Form2 : Form { //Your own event based on created delegate public event ButtonClickToMainForm ButtonClickedToMainForm; public Form2() { InitializeComponent(); } //This method will invoke your event private void OnButtonClickedToOtherForm(object sender, EventArgs e) { ButtonClickedToOtherForm?.Invoke(this, e); } private void button1_Click(object sender, EventArgs e) { //On button1_Click this will fire the event on the other form OnButtonClickedToMainForm(this, e); } 

y en su formulario con las tags suscríbase a ese evento.

 public Form1() { InitializeComponent(); //Subscribe to event from your other Form Form2.ButtonClickedToOtherForm += Form2_ButtonClickedToOtherForm; } //Button on Form2 has been clicked private void Form2_ButtonClickedToMainForm(object sender, EventArgs e) { //change your Label Text here... }