2012-11-05 10 views
5

Ho una forma con un pulsante e due etichettecome accedere ai componenti winform da un'altra classe?

e ho una classe separata denominata myCounter

voglio la classe myCounter di essere in grado di accedere alle etichette nella forma attraverso un metodo chiamato ChangeColor. .

come può rendere le etichette disponibili in questa classe

forma

public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     public Color colTurn 
     { 
      get { return lblp1Turn.BackColor; } 
      set { lblp1Turn.BackColor = value; } 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 

     } 
    } 

classe

class myCounter 
{ 
    private readonly Form1 Board; 
    public myCounter(Form1 Board) 
    { 
     this.Board = Board; 
    } 

    public int turn = 0; 


    public void changeColor() 
    { 

     if (turn == 0) 
     { 
      turn = 1; 
      lbl 

      //change color code here 
     } 
    } 
} 
+0

ho provato a impostare – Tacit

+0

Puoi mostrare il codice che hai provato? – Frederiek

+0

Hai provato a passare gli oggetti nella tua seconda classe? – EJC

risposta

4

così sembra che si sta passando l'intera forma nella vostra seconda classe in ogni caso, quindi mi piacerebbe fare ciò che LightStriker suggerito. Crea un accesso pubblico per tutti i tuoi articoli e poi impostalo nell'altra classe.

public partial class Form1 : Form 
    { 
     private myCounter _counterClass; 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     public Label MyLabel1 
     { 
      get {return mylabel1;} 
     } 

     public Label MyLabel2 
     { 
      get {return mylabel2;} 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      _counterClass = new myCounter(this); 
     } 

     protected void ButtonClick(object sender, EventArgs e) 
     { 
      _counterClass.changeColor(); 
     } 
    } 

Quindi nella seconda classe è possibile accedere all'etichetta.

class myCounter 
{ 
    private readonly Form1 Board; 
    public myCounter(Form1 Board) 
    { 
     this.Board = Board; 
    } 

    public int turn = 0; 


    public void changeColor() 
    { 

     if (turn == 0) 
     { 
      turn = 1; 
      Board.MyLabel1.BackColor = Color.Red; 
      Board.MyLabel2.BackColor = Color.White; 
     } 
     else 
     { 
      turn = 0; 
      Board.MyLabel2.BackColor = Color.Yellow; 
      Board.MyLabel1.BackColor = Color.White; 
     } 
    } 
} 

tenere a mente questo è il codice che ho scritto in un editor di wiki markup ed è testato. Questo DOVREBBE funzionare per te però.

+0

cosa metto dopo i punti – Tacit

+0

Qualunque proprietà tu stia cercando di cambiare. Vuoi cambiare BackColor vero? – EJC

+0

Puoi dirmi come si chiama il metodo changeColor? – EJC

3

Creare un metodo pubblico sul modulo per questo.

public partial class Form1 : Form{ 
    public void SetLabelColor(Color color){ 
     mylabel.BackColor = color; 
    } 
    //... Other code 
} 
+0

quindi, come faccio a rendere l'etichetta disponibile nella classe – Tacit

+0

e perché si utilizza una classe parziale – Tacit

+0

@Tacit: è solo copiata dal * codice *. La classe parziale è perché è un modulo e stai utilizzando un file .designer.cs in parte con il file cs code-behind. – Patrick

Problemi correlati