C# 如何从另一个类访问winform组件?

C# 如何从另一个类访问winform组件?,c#,.net,winforms,visual-studio-2010,class,C#,.net,Winforms,Visual Studio 2010,Class,我有一个带有一个按钮和两个标签的表单 我有一个单独的类叫做myCounter 我希望myCounter类能够访问表单中的标签 通过名为changeColor的方法 如何使标签在此类中可用 形式 public partial class Form1 : Form { public Form1() { InitializeComponent(); } public Color colTurn

我有一个带有一个按钮和两个标签的表单

我有一个单独的类叫做myCounter

我希望myCounter类能够访问表单中的标签 通过名为changeColor的方法

如何使标签在此类中可用

形式

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

        }
    }
班级

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

为此在窗体上创建公共方法

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

看来你把整个表格都交给了第二节课,所以我会照LightStriker的建议去做。为所有项目创建公共访问器,然后在其他类中设置它

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();
        }
    }
然后在你的第二节课上,你可以访问你的标签

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

请记住,这是我在wiki标记编辑器中编写的代码,未经测试。这应该对你有用。

我试过get和set。你能展示一下你试过的代码吗?你试过把这些项目传给你的第二堂课吗?@Jon B你对我的问题做了什么man@Tacit-我修复了一个小的代码格式问题,使您的问题更易于阅读。请不要生气。这是堆栈溢出工作原理的一部分。那么,如何使标签在类中可用,以及为什么使用分部class@Tacit:它只是从您的代码中复制的。分部类是因为它是一个表单,而您使用的是.designer.cs文件,其中一部分是cs文件背后的代码。@默认:另外,“使标签可用”没有任何意义。您声明要公开标签的颜色,这正是Oscar通过在类中使用方法提供的。我可以在类中使用方法来实现,但我希望在窗体类之外执行所有操作—无论您试图更改什么属性。你想改变背景色吗?你能告诉我什么叫changeColor方法吗?它将是form类中的一个按钮。。我是否需要myCounter类的实例,或者我如何调用此方法好的,那么此代码应该在第一次单击按钮时起作用,假设您在formLoad中创建并保持myCounterClass。除了changeColor方法之外,还有什么设置
转换
吗?我不确定我是否完全理解您试图实现的目标。你能告诉我你想要代码以最基本的形式做什么吗?