• ベストアンサー

C#でテキストボックスからstring変数に代入

現在、Visual Studio 2019でC#勉強中です。 フォームアプリを作成していて、Hello worldができたので、そこからtextBox1の中に書かれた文字列を,stringで宣言したsという変数に代入しようとしたら、 string s = textBox1.Text; このようにすると、次のようなエラーが出てきてビルドが失敗します。 (エラー内容) エラー CS0236 フィールド初期化子は、静的でないフィールド、メソッド、またはプロパティ 'Form1.textBox1' を参照できません HelloWorldCS C:\Users\myname\source\repos\HelloWorldCS\Form1.cs 38 アクティブ このエラーの回避方法、そしてstring変数sへの代入方法を教えて頂きますよう、お願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • hiodraiu
  • ベストアンサー率15% (451/2846)
回答No.2

private等のアクセス修飾子に依存する話ではありません。 エラーの説明にある通り、静的でないフィールドを参照できないってことです。 ※フィールドとは変数のことで、この場合はTextBox型の変数textBox1 を指します。

techhouse
質問者

お礼

回答頂きありがとうございます。 一応解決が付きました。 https://github.com/KenjiMaehara/HelloWorldCS/blob/master/Form1.cs 自分で作成した変数string testStr;に、テキストボックスの値がちゃんと入っていることを、デバッグモードで確認できました。 そして、最終的目標として、string testStr変数に入れたIPアドレスの文字列情報を tcpClient.ConnectAsync(testStr, 1234); このメソッドに渡そうとしたときに、testStrの箇所でエラーが出ていて困っていたわけですが、 Visual Studio | WPF > TCP接続 > 接続タイムアウト処理 > .NET Framework 4.5以降? > ConnectAsync()使用 こちらのように、同様のメソッドを使用したプログラムでは通常に使用できていることを確認できたので、他の問題を探したところ、次の方法でこのエラーが解決できました。 https://github.com/KenjiMaehara/HelloWorldCS/commit/07af310e7cbc419fa6d665feb42eccf4e6cdd222#diff-a82de4ca15ed62a8224614571631e0eeb45054bb778bf78d81c93fd5bb696041 この拝借しているTCPプログラム https://gist.github.com/jamesmanning/2622054 こちらの方がどうしてstaticにしているのか深い意味があるような気がするのですが、とりあえずやりたいことができたので解決とさせて頂きます。

その他の回答 (1)

  • hiodraiu
  • ベストアンサー率15% (451/2846)
回答No.1

string s = textBox1.Text;を何処に書かれてますか? どこか適当なメソッド内に書かれていないと、上記エラーが出ます。

techhouse
質問者

お礼

お世話になっております。 こちらのソースコードの string s = textBox1.Text; こちらの行のエラーです。 https://github.com/KenjiMaehara/HelloWorldCS/blob/master/Form1.cs いろいろといじっているのですが、 private void Button1_Click(object sender, EventArgs e) こちらのメソッド?の中で string s = textBox1.Text; この文を入れた場合はビルドOKになるのですが、この違いはprivateのメソッドだからとか関係ありますでしょうか?

関連するQ&A

専門家に質問してみよう