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 を参照してください)

私はこれをオフィスに少し回しましたが、3 番目の例がコンパイルされず、'うーん'、'うーん...' と肩をすくめる以外に何も得られなかった理由を説明できる人は誰もいませんでした。

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 に答える