无法访问第二个表单标签

时间:2013-05-06 21:57:52

标签: c# c#-4.0

我有两个名为Form1Form2的窗体。在Form2的{​​{1}}控件中,我试图通过使用如下代码在两个表单之间传递值:

label1

但我收到此错误消息:

  

'Form2.label1'由于其保护级别而无法访问

你能告诉我为什么会这样吗?

3 个答案:

答案 0 :(得分:3)

Labell将被声明为protectedprivate,这意味着其他类不可见。

因为它是自动生成的,所以你不应该将它的声明改为public,所以你必须使用一个属性来设置值,或者创建第二个构造函数来传递标签的新值。 / p>

使用属性:

public string LabelValue
{
    get { return this.label1.Text; }
    set { this.label1.Text = value; }
}

然后:

Form2 frm = new Form2();
frm.LabelValue = "new string";
frm.ShowDialog();

使用新的构造函数:

public Form2(string labelValue) : this()
{
    this.Label1.Text = labelValue;
}

然后使用它:

Form2 frm = new Form2("new string");
frm.ShowDialog();

答案 1 :(得分:3)

标签的可访问性级别太高。如果它是公开的,你只能访问它,我认为它是受保护的。

查看Access Modifiers

我会以映射到标签文本的形式提供公共属性。这比直接访问控件更具可读性和安全性。

public string LabelText
{
    get {
        return label1.Text;
    }
    set {
        label1.Text = value;
    }
}

现在您可以通过此属性获取/设置标签的文本:

Form2 frm = new Form2();
frm.LabelText = "Hello World";
frm.ShowDialog();

答案 2 :(得分:2)

在Form2中选择label1。接下来,在“属性窗格”(默认情况下右下角)中,将 Modifiers()属性更改为“公共”。 Modifiers() Property

现在你可以做到:

frm.label1.Text = "Hello World!";

但是,这不是C#中的“正确”方法,或者通常是面向对象编程。请参阅其他答案,了解如何在属性中包装标签,或将值传递给Forms构造函数。

另外,在VB.Net IDE中,控件默认为Public,因此您可以按照预期访问“开箱即用”控件的Text属性,而无需进行任何更改。只是C#和VB.Net之间的许多细微差别之一...