2012-01-19 5 views
0

ご覧のとおり、私が使用したクラス名はVisual C#で生成されたクラスのデフォルト名です。 "textBox2"というTextBoxの値を変更するにはどうすればよいですか(このTextBoxはForm1のデザインに既に配置されています)、 "Program"クラスからですか?私はたくさんのことを試してみましたが、試したすべてのことがこのエラー(またはそれに似ています)になりました。An object reference is required for the non-static field, method, or property 'WindowsFormsApplication1.Form1.textBox2'"Program"クラスからTextBox "textBox2"にアクセスするにはどうすればよいですか?

あなたができるならば、ありがとう、ありがとう。

答えて

1

まず、あなたは、一般に、あなたのプログラムのクラスからのテキストボックスなどのコントロールにアクセスするべきではありません。代わりにForm1.csファイルでこれを行う必要があります。 Form1はクラスであり、textBox2の保護されたフィールドを持ち、クラスの外ではアクセスできません。 Program.csから値を変更する場合は、textBos2.Textの値を設定するpublic関数をForm1に追加する必要があります。

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

UPDATE:

私はちょうどあなたのクラスとクラスのインスタンス、静的フィールドと非staticフィールドとの間の差の簡単な説明を与えるつもりです。何か言葉を許してください。

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

Form1 form = new Form1; 

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

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

+0

Form1に 'textBox2.Text =" whatever ... "'を実行してtextBox2を修正しようとする静的静的関数があり、エラーが発生します。 –

+0

@SamH静的関数はクラス(Form1)のメンバーであり、非静的フィールドtextBox2はインスタンスのメンバーであるため、静的関数からはこれを実行できません。 2つのテキストボックスがあるような2つのForm1がある場合、Form1.ChangeTextはどのtextBox2を変更するのかわかりません。それは意味をなさないでしょうか? – smelch

+0

静的機能を非静的に変更した場合、別のエラーが発生します。エラーのサークル内で動き回っているようです。 –

1

Form1クラスの新しいインスタンスを作成する必要があります。
あなたは、あなたがこれを行うには、あなたのForm1のインスタンスを持っている必要がありますnew()

var form1 = new Form1(); 
form1.textBox2.Text= "aaa"; 
+2

私はテキストプロパティを使用してテキストボックスの値を設定する必要があると思います。 – Hans

+1

@godonは最近、datagrdiviewsであまりにも頻繁に遊んでいますか? ;) – nawfal

+0

@ハンス。 'Value'から' Text'に変更されました。ありがとう – gdoron

1

せずに非静的VARに「到達」することはできません。

Form1 frm = new Form1(); 

次に、プライベートメンバーなので、テキストボックスにアクセスするパブリックメソッドを構築する必要があります。

のForm1.cs:

最後に
public void UpdateText(string newValue) 
{ 
    this.textbox2.Text = newValue; 
} 

frm.UpdateText("new text"); 
0

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

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

これは絶対に悪いデザインがとにかく..あなたはこれをしたいと思う理由を教えてくださいで、私たちは本当の問題に対処するのに役立つだろう。

+0

私がこれをやっているのは、TextBoxのLuaInterfaceの出力を印刷したいからです。おそらく解決策は、私がLuaInterfaceを使用している方法を再配置することだけです。 –

+0

@SamH oh。しかし、あなたはコードを動かしてクラスそのものを形成することができます。あるいは別のLuaクラスでフォームクラスから呼び出すこともできます。最後にあなたの選択.. – nawfal

関連する問題