2011-04-22 11 views
5

Así que aquí está mi programa.Actualiza automáticamente la etiqueta de variables globales cuando cambia

using System; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     static int count = 0; 

     public Form1(){InitializeComponent();} 

     private void button1_Click(object sender, EventArgs e) 
     { 
      count += 1; 
      label1.Text = Convert.ToString(count); 
     } 

     private void button2_Click(object sender, EventArgs e) 
     { 
      count -= 1; 
      label1.Text = Convert.ToString(count); 
     } 
    } 
} 

Ahora ... tengo un programa que sumar o restar el número 1 por cada vez que pulse uno de los dos botones y guardar el valor de recuento variable global y luego mostrarla en label1.

Digamos que quiero cambiar el valor de otra etiqueta (etiqueta2) en la que también quiero mostrar el contenido del valor de la variable de conteo cada vez que cambia la etiqueta1.

por lo que hay una manera, el uso de eventos desde el botón que se puede hacer así:

private void button1_Click(object sender, EventArgs e) 
{ 
    count += 1; 
    label1.Text = Convert.ToString(count); 
    label2.Text = Convert.ToString(count); 
} 

private void button2_Click(object sender, EventArgs e) 
{ 
    count -= 1; 
    label1.Text = Convert.ToString(count); 
    label2.Text = Convert.ToString(count); 
} 

Así que aquí es la cuestión ...

Pero digamos que quiero actualizar el valor de label2 no desde el evento de botones sino de alguna manera para que actualice el valor automáticamente de la variable de conteo siempre que cambie.

Por favor ayuda.

Respuesta

7

Uso viviendas en esta situación

private int count 
private int Count 
{ 
    get { return count; } 
    set 
    { 
     count = value; 
     RefreshLabels(); 
    } 
} 

private void RefreshLabels() 
{ 
    label1.Text = Convert.ToString(count); 
    label2.Text = Convert.ToString(count); 
} 

Y cuando se quiere cambiar la cuenta, sólo tiene que utilizar la propiedad en lugar

Count += 1; 
Count -= 1; 
+0

¿Qué ocurre si la variable está en el archivo program.cs y no en form.cs? ¿Hará la diferencia? – pyCthon

+0

si tiene referencia a esa variable de su clase de formulario que funcionará – Stecya

4

No puedes datos se unen a un miembro de static, y que pueda 't data-bind a un campo (a menos que use un modelo de enlace personalizado); una opción sería tener un poco de contexto ejemplo que puede datos se unen también, por ejemplo:

public class Counters { 
    public event EventHandler SomeNameChanged; 
    private int someName; 
    public int SomeName { 
     get { return someName; } 
     set { 
      if(someName != value) { 
       someName = value; 
       var handler = SomeNameChanged; 
       if(handler != null) handler(this, EventArgs.Empty); 
      } 
     } 
    } 
} 

A continuación, hacer posible pasar una instancia Counters a su forma, y ​​los datos se unen:

private void BindCounters(Counters counters) 
{ 
    label1.DataBindings.Add("Text", counters, "SomeName"); 
    label2.DataBindings.Add("Text", counters, "SomeName"); 
} 

Por supuesto, puede tener una instancia static del Counters, pero una vez más: ese no es un gran diseño; static a menudo significa que está tomando un atajo hacky.

1

¿Qué le parece usar una propiedad? Ya no puede ser estático, ¿eso es un requisito?

[Editar: Se podría hacer _count estática de nuevo en caso de que es un requisito.]

private EventHandler CountChanged; 

private int _count; 
private int count 
{ 
    get 
    { 
     return _count; 
    } 
    set 
    { 
     if(_count != value) 
     { 
      _count = value; 
      if(CountChanged != null) 
       CountChanged(this, EventArgs.Empty); 
     } 
    } 
} 

Esto siempre se disparará el evento CountChanged siempre count se modifica, para que pueda conectar sus controladores de eventos personalizados para cada controlar.

Cuestiones relacionadas