0

我把这个问题归结为一个非常简单的程序:

public Form1()
{
    InitializeComponent();

    TextBox tb1;

    tb1 = textBox1;             // this line is OK
    tb1 = this.textBox1;        // this line is OK
    tb1 = Form1.textBox1;       // this line generates error message    

    }

如果将鼠标悬停在“textBox1”、“this.textBox1”和“Form1.textBox1”上,工具提示在所有情况下都会显示“TextBox Form1.textBox1”。

(有关显示工具提示的屏幕转储,请参见 www.firish.com/tb1.jpg 和 www.firish.com/tb2.jpg)

我在办公室里转了一圈,但这里没有人能真正解释为什么第三个例子没有编译,但除了“嗯哼”、“嗯……”和几个耸肩之外没有得到什么。

4

3 回答 3

6

因为 Form1 是类的名称,而不是 Form1 的实例。

当您创建类时,您的代码如下所示

Form1 f = new Form1();

f是 Form1 类的实例,您可以使用(前提是 textbox1 可见)

TextBox tb1 = f.TextBox1;

在 Form1 类中,您可以使用关键字引用当前实例this

于 2012-05-21T22:47:33.223 回答
1

因为使用这种语法,您只能访问static成员。textBox1是一个动态成员,只能从初始化对象访问。myObject.textBox1. 你正在尝试做MyClass.textBox1

于 2012-05-21T22:48:36.547 回答
1

textBox1 是一个实例变量。它必须存在于对象的实例化副本中。当你这样说时会发生这种情况:

Form1 form new Form1();
form.textBox1 = "Something";

如果您不实例化该对象,则它正在使用静态调用,并且您不能静态调用作为实例变量的对象。

Form1.textBox1 = "Something"; // this fails.

在您的情况下,您正在使用构造函数。构造函数仅在对象被实例化时被调用,因此使用 this(或隐含的 this)有效,但使用静态调用不起作用,因为没有实例可以分配变量。

于 2012-05-21T22:50:14.570 回答