如您所见,我使用的类名是Visual C#生成的类的默认名称。如何在“Program”类中更改名为“textBox2”的TextBox中的值(此TextBox已放置在Form1设计中)?我尝试了很多东西,我尝试的每件事都会导致此错误(或类似):An object reference is required for the non-static field, method, or property 'WindowsFormsApplication1.Form1.textBox2'
如果可以,请尽量保持简单,谢谢。
答案 0 :(得分:1)
您必须创建Form1
类的新实例
没有new()
var form1 = new Form1();
form1.textBox2.Text= "aaa";
答案 1 :(得分:1)
您需要拥有Form1
的实例才能执行此操作。
Form1 frm = new Form1();
然后你必须构建一个公共方法来访问你的文本框,因为它是私人成员。
Form1.cs中:
public void UpdateText(string newValue)
{
this.textbox2.Text = newValue;
}
最后:
frm.UpdateText("new text");
答案 2 :(得分:1)
首先,您通常不应从Program类访问文本框等控件。相反,您应该在Form1.cs文件中执行此操作。 Form1是一个类,它有一个textBox2的受保护字段,因此它在类外是不可访问的。如果要更改Program.cs中的值,则应向Form1添加一个公共函数,用于设置textBos2.Text的值。
其次,您似乎只是键入类名而不是实例名。区别在于Textbox是一个类,textBox1和textBox2是实例。 Textbox.Text无效,因为您需要指定要获取的WHICH文本框或为其设置文本。它与Form1.textBox2相同。 Form1是一个类,可以有很多类。您必须指定表单实例的名称才能访问其公共成员。
<强>更新强>
我将简要介绍类和类的实例,静态字段和非静态字段之间的区别。请原谅任何冗长。
创建新的Windows窗体应用程序时,Visual Studio将为您创建Form1类型。 Form1是一个类。程序然后使用Form1创建一个表单实例并显示它。代码看起来像:
Form1 form = new Form1;
在这种情况下,form是实例。您可以创建Form1的多个实例。每个实例都将包含您创建的textBox2,它是Textbox类的一个实例。就像你必须使用textBox2.Text来获取你在表单上创建的第二个文本框的文本一样,你必须指定form.textBox2(或设置textBox2.Text值的公共方法)。 Form1,即使它是一个类之后它有一个数字,form也是实例。它们与Textbox和textBox2具有相同的关系。
实例可以访问非静态成员。静态成员可以访问该类。静态成员除非是通过实例,否则无法访问非静态成员。
答案 3 :(得分:0)
将textBox2设为公共或内部。为此,请从设计器(属性)调整它的Modifier
属性。然后在Main中从“Program”类中执行此操作:
Form1 f = new Form1();
f.textBox2.Text = "sdfsdf";
Application.Run(f);
这绝对是一个糟糕的设计..告诉我们为什么你会想要这个,我们将有助于处理真正的问题。