从其他C#类访问Form1按钮

时间:2019-03-29 11:18:15

标签: c# class

我正在尝试从另一个类访问Form1按钮。

我尝试过这样:

class X{
 public void Check() {
        Form1 form = new Form1();
        if (form.button1.color == Color.Black) {
            //do something
        }
}

我得到了这个错误:'Form1.button1' is inaccessible due to its protection level

有人知道如何解决吗?谢谢。

2 个答案:

答案 0 :(得分:1)

如果要更改已显示表单的某些属性,则需要该表单的实例。
但是,直接访问表单的内部组件是一种不好的做法,这可能是属性修饰符为私有的默认值的原因。如果将此属性更改为Public,则可以访问内部按钮控件

但是我建议您使用更多的OOP方法。 首先在Form1类中创建一个公共属性,该属性将您按钮的ForeColor或BackColor返回给任何想知道它的人,而无需完全访问整个按钮

public class Form1 : Form
{
    public Color CurrentColor 
    {
        get { return button1.ForeColor; }
    }

}

现在,类X中将当前Form1的实例传递给Check方法并使用CurrentColor属性

class X
{
    public void Check(Form1 current) 
    {
        if (current.CurrentColor == Color.Black) 
        {
             .....do something...    
        }
    }
}

答案 1 :(得分:0)

这意味着Form类上的按钮标记为私有成员。如果打开Form1.Designer.cs文件,您将看到:

private System.Windows.Forms.Button button1;

因此,您不能使用其他类中的button1。如果您想这样做,请将private更改为public:

public System.Windows.Forms.Button button1;

然后,您可以在其他课程中使用它:

class X
{
    void Check()
    {
        Form1 form = new Form1();
        form.button1.BackColor = Color.Aqua;
    }
}

您可以阅读有关访问修饰符here

P.S。 我也建议您使用MVC模式来维护您的应用程序