0

如您所见,我使用的类名是 Visual C# 生成的类的默认名称。如何从“程序”类更改名为“textBox2”的文本框(此文本框已放置在 Form1 设计中)中的值?我已经尝试了很多东西,我尝试的每一件事都会导致这个错误(或类似于):An object reference is required for the non-static field, method, or property 'WindowsFormsApplication1.Form1.textBox2'

如果可以的话,请尽量保持你的答案简单,谢谢。

4

4 回答 4

1

您必须创建Form1该类的新实例。
没有你就不能“到达”一个非静态变量new()

var form1 = new Form1();
form1.textBox2.Text= "aaa";
于 2012-01-19T20:25:36.790 回答
1

您需要有一个您的实例Form1才能执行此操作。

Form1 frm = new Form1();

然后你必须建立一个公共方法来访问你的文本框,因为它是一个私有成员。

Form1.cs:

public void UpdateText(string newValue)
{
    this.textbox2.Text = newValue;
}

最后:

frm.UpdateText("new text");
于 2012-01-19T20:26:30.807 回答
1

首先,您通常不应该从 Program 类访问控件,例如文本框。相反,您应该在 Form1.cs 文件中执行此操作。Form1 是一个类,它有一个 textBox2 的受保护字段,因此在类外无法访问。如果要更改 Program.cs 中的值,应向 Form1 添加一个公共函数,用于设置 textBos2.Text 的值。

其次,您似乎只是在输入类名而不是实例的名称。区别在于 Textbox 是一个类, textBox1 和 textBox2 是实例。Textbox.Text 无效,因为您需要指定您尝试获取或设置文本的哪个文本框。Form1.textBox2 也一样。Form1 是一个类,可以有很多类。您必须指定表单实例的名称才能访问其公共成员。

更新:

我只是简单解释一下类和类的实例、静态字段和非静态字段之间的区别。请原谅任何啰嗦。

当您创建一个新的 Windows 窗体应用程序时,Visual Studio 将为您创建一个 Form1 类型。Form1 是一个类。然后程序使用 Form1 创建一个表单实例并显示它。代码看起来像:

Form1 form = new Form1;

在这种情况下,表单就是实例。您可以创建 Form1 的多个实例。每个实例都有您创建的 textBox2,它是 Textbox 类的一个实例。就像您必须执行 textBox2.Text 以获取您在表单上创建的第二个文本框的文本一样,您必须指定 form.textBox2(或设置 textBox2.Text 值的公共方法)。Form1,尽管它是一个类后有一个数字,而form是实例。它们与 Textbox 和 textBox2 具有相同的关系。

实例可以访问非静态成员。类可以访问静态成员。静态成员不能访问非静态成员,除非它通过实例。

于 2012-01-19T20:26:55.923 回答
0

使 textBox2 公开或内部。为此,请Modifier从设计器 (Properties) 调整它的属性。然后在“程序”类的 Main 中执行此操作:

    Form1 f = new Form1();
    f.textBox2.Text = "sdfsdf";
    Application.Run(f);

无论如何,这绝对是一个糟糕的设计。告诉我们你为什么想要这个,我们将有助于处理真正的问题。

于 2012-01-19T20:27:05.780 回答