🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

3回答

7341閲覧

C# 変数の受け渡しがしたいです。

haru_kandai

総合スコア6

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2019/12/01 04:08

前提・実現したいこと

C#フォームアプリケーション上にて、
テキストに入力した文字を変数に代入し、別の処理に用いたいです。
初心者で稚拙な内容ですみません。宜しくお願い致します。

該当のソースコード

C#
namespace WindowsFormsApp2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void OnTagsReported(ImpinjReader sender, TagReport report) //センサから情報を取得した際に動く { if(moji == "0001")//Button1_Clickで取得した moji の変数をそのまま使いたいです。 { //処理 } } private void Button1_Click(object sender, EventArgs e) { string moji = textBox1.Text; } }

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

クラスのメンバー変数にstring _mojiとして定義してやることで、同一クラス内のメソッドであればメンバー変数を利用できます。

namespace WindowsFormsApp2 { public partial class Form1 : Form { // クラスのスコープで定義することで // いずれのメソッドでもアクセスできるメンバー変数が作れる private string _moji = null; public Form1() { InitializeComponent(); } private void OnTagsReported(ImpinjReader sender, TagReport report) //センサから情報を取得した際に動く { if(_moji == "0001")//Button1_Clickで取得した moji の変数をそのまま使いたいです。 { //処理 } } private void Button1_Click(object sender, EventArgs e) { // これはローカル変数に対する代入なので // メソッドを越えて moji は利用できない // string moji = textBox1.Text; // メンバー変数の _moji に代入することで // 別メソッドからもアクセスできるようにする _moji = textBox1.Text; } } }

投稿2019/12/01 12:13

tor4kichi

総合スコア769

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

haru_kandai

2019/12/02 03:37

丁寧な解説ありがとうございます。スコープについてやっと理解することができました。 ほんとにありがとうございます。
guest

0

大雑把に言うと、変数は宣言する場所によってアクセスできる範囲が変わります。
変数のスコープについて学習してください。

投稿2019/12/01 04:46

YAmaGNZ

総合スコア10469

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

haru_kandai

2019/12/01 04:54

Button1_Click内ではstaticが使えず、 Button1_Clickの外では変数mojiの値が呼び出せないということでしょうか。
guest

0

Button1_Clickメソッドで宣言したmojiは、ローカル変数、メソッドに局所的(ローカル)な変数です。よって、メソッドの外へ持ち出すことはできません。
外に通知するには、外部から参照で入力を受けるか、戻り値として通知します。
しかし、ボタンのクリックイベントハンドラーなので、シグネチャーを変えることはできません。
よって、クラスの変数として、クラス内で参照できるようにします。

なお、ソースコードは「<code>」をクリックしたら入力される ``` の中に入れて下さい。

投稿2019/12/01 04:18

Q71

総合スコア995

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

haru_kandai

2019/12/01 04:34

回答ありがとうございます。 ボタンクリックがイベントハンドラであるため、戻り値として受け渡すことができないことが理解できました。 クラスの変数として、クラス内で参照できるためにはどのようにすればよいでしょうか。 ボタンクリックで取得した変数にstaticで再定義すると、staticがこの項目に対し有効でないとエラーが生じます。
Zuishin

2019/12/01 05:02

「クラスの変数」は通常、静的フィールドを指します。インスタンスフィールドのことだとしても、TextBox のプロパティなので不要です。そもそもイベントハンドラ内にロジックを詰め込むのは良い作法ではありません。
Q71

2019/12/01 05:11

> 「クラスの変数」は通常、静的フィールドを指します。 私は普段「クラスの静的変数」のように表現していました。認識がずれていたのですね。直します。 ----- > ボタンクリックで取得した変数にstaticで再定義すると ちょっとイメージできないです。コメント欄ではコードを埋め込めないので、質問文を編集して欲しいですが、こんな感じ? private void Button1_Click(object sender, EventArgs e) {   static string moji = textBox1.Text; } C# では、乱暴に言うと、一番近い { } の中が「変数を参照できる範囲」です。ですから、ハンドラーメソッドの中で「宣言」しても、クラスの他のメソッドからは参照できません。参照可能な範囲を考えて宣言して下さい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問