我正在尝试从另一个类访问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
有人知道如何解决吗?谢谢。
答案 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模式来维护您的应用程序