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