2012-11-05 36 views
5

tôi có một mẫu với một nút và hai nhãncách truy cập các thành phần winform từ một lớp khác?

và tôi có một lớp riêng biệt gọi là myCounter

tôi muốn lớp myCounter để có thể truy cập vào các nhãn theo hình thức thông qua một phương pháp gọi là changeColor. .

thế nào có thể làm cho các nhãn có sẵn trong lớp này

dạng

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

     } 
    } 

lớp

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

tôi đã cố gắng lấy và đặt – Tacit

+0

Bạn có thể hiển thị mã mà bạn đã thử không? – Frederiek

+0

Bạn đã thử chuyển các mục này vào lớp thứ hai chưa? – EJC

Trả lời

4

Vì vậy, có vẻ như bạn đang chuyển toàn bộ biểu mẫu vào lớp thứ hai của mình, nên tôi sẽ làm những gì LightStriker đề xuất. Tạo một truy cập công khai cho tất cả các mục của bạn và sau đó đặt nó trong lớp khác của bạn.

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

Sau đó, trong lớp thứ hai, bạn có quyền truy cập vào Nhãn của mình.

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

Hãy nhớ đây là mã tôi đã viết trong trình chỉnh sửa đánh dấu wiki và chưa được kiểm tra. NÊN này làm việc cho bạn mặc dù.

+0

tôi phải đặt những gì sau khi các dấu chấm – Tacit

+0

Bất kể tài sản nào bạn đang cố thay đổi. Bạn muốn thay đổi BackColor phải không? – EJC

+0

Bạn có thể cho tôi biết điều gì đang gọi phương thức changeColor không? – EJC

3

Tạo phương pháp công khai trên biểu mẫu của bạn cho việc này.

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

vì vậy làm thế nào để tôi làm cho nhãn có sẵn trong lớp – Tacit

+0

và lý do tại sao bạn sử dụng một phần – Tacit

+0

@Tacit: Nó chỉ được sao chép từ mã * của bạn *. Lớp một phần là vì nó là một biểu mẫu và bạn đang sử dụng tệp .designer.cs một phần với tệp cs-code phía sau. – Patrick

Các vấn đề liên quan