0

ご覧のとおり、私が使用したクラス名は、Visual C#によって生成されたクラスのデフォルト名です。「Program」クラスから「textBox2」という名前のTextBox(このTextBoxはすでに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から値を変更する場合は、textBos2.Textの値を設定するパブリック関数をForm1に追加する必要があります。

次に、インスタンスの名前ではなく、クラス名を入力しているように見えます。違いは、Textboxがクラスであり、textBox1とtextBox2がインスタンスであるということです。テキストを取得または設定しようとしているテキストボックスを指定する必要があるため、Textbox.Textは無効です。Form1.textBox2でも同じです。Form1はクラスであり、それらの多くが存在する可能性があります。パブリックメンバーにアクセスするには、フォームのインスタンスの名前を指定する必要があります。

アップデート:

クラスとクラスのインスタンスの違い、静的フィールドと非静的フィールドについて簡単に説明します。言葉遣いはご容赦ください。

新しいWindowsフォームアプリケーションを作成すると、VisualStudioによってForm1タイプが作成されます。Form1はクラスです。次に、プログラムはForm1を使用してフォームインスタンスを作成し、それを表示します。コードは次のようになります。

Form1 form = new Form1;

この場合、フォームがインスタンスです。Form1の複数のインスタンスを作成できます。各インスタンスには、Textboxクラスのインスタンスである作成したtextBox2が含まれます。フォーム上に作成した2番目のテキストボックスのテキストを取得するためにtextBox2.Textを実行する必要があるのと同様に、form.textBox2(またはtextBox2.Text値を設定するパブリックメソッド)を指定する必要があります。Form1は、クラスの後に番号があり、formがインスタンスですが。これらは、TextboxおよびtextBox2と同じ関係にあります。

非静的メンバーはインスタンスにアクセスできます。静的メンバーはクラスにアクセスできます。静的メンバーは、インスタンスを経由しない限り、非静的メンバーにアクセスできません。

于 2012-01-19T20:26:55.923 に答える
0

textBox2をパブリックまたは内部にします。これを行うModifierには、デザイナー(プロパティ)からプロパティを調整します。次に、「プログラム」クラスのMainでこれを実行します。

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

これはとにかく絶対に悪い設計です..なぜこれが必要なのか教えてください、私たちは本当の問題に対処するのに役立ちます。

于 2012-01-19T20:27:05.780 に答える