how to access winform components from another class?

匿名 (未验证) 提交于 2019-12-03 02:03:01

问题:

i have a form with one button and two labels

and i have a separate class called myCounter

i want the myCounter class to be able to access the labels in the form through a method called changeColor..

how can make the labels available in this class

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

the class

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

回答1:

So it looks like you're passing the whole form into your second class anyway, So I'd do what LightStriker suggested. Make a public accessor for all of your items and then set it in your other class.

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

Then in your second class you have access to your Label.

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

Keep in mind this is code I have written in a wiki markup editor and is untested. This SHOULD work for you though.



回答2:

Create a public method on your form for this.

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


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!