2012-11-05 14 views
5

mam formularz z jednego przycisku i dwóch etykietjak uzyskać dostęp do komponentów WinForm z innej klasy?

i mam oddzielną klasę o nazwie MyCounter

chcę klasa MyCounter aby móc uzyskać dostęp do etykiet w formie za pomocą metody zwanej changeColor. .

jak można zrobić etykiety dostępne w tej klasie

na formę

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) 
     { 

     } 
    } 

klasa

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

Próbowałem pobrać i ustawić – Tacit

+0

Czy mógłbyś pokazać kod, który wypróbowałeś? – Frederiek

+0

Czy próbowałeś przekazać przedmioty do swojej drugiej klasy? – EJC

Odpowiedz

4

Wygląda więc na to jesteś przejazdem cały formularz do swojej drugiej klasy tak, więc zrobiłbym co sugeruje LightStriker. Zrób publiczny dostęp do wszystkich swoich przedmiotów, a następnie ustaw go w swojej drugiej klasie.

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(); 
     } 
    } 

Następnie w drugiej klasie masz dostęp do swojej etykiety.

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; 
     } 
    } 
} 

Należy pamiętać, że jest to kod, który napisałem w edytorze znaczników wiki i nie został przetestowany. To jednak powinno ci się udać.

+0

co umieszczam po kropkach – Tacit

+0

Bez względu na właściwość, którą próbujesz zmienić. Chcesz zmienić kolor BackColor? – EJC

+0

Czy możesz mi powiedzieć, co nazywa się metodą changeColor? – EJC

3

utworzyć metodę publiczną o swojej postaci w tej sprawie.

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

więc w jaki sposób udostępnić etykietę w klasie – Tacit

+0

i dlaczego używasz częściowej klasy – Tacit

+0

@ Tacit: To jest po prostu skopiowane z * twojego * kodu. Klasą częściową jest to, że jest to forma i używasz pliku .designer.cs w części z plikiem CSS z kodem. – Patrick

Powiązane problemy