2017-10-30 8 views
1

今回作成したC#コンソールアプリケーションを再作成しようとしていますが、今回はASP.Net Webフォームでボタンを使用していました。別のメソッドでプロテクトメソッドの変数を使用する方法

私は2つのボタンを使って変数を値で初期化し、もう1つは変数の値を使用するようにしましたが、変数を使用しようとすると、変数が現在のコンテキストに存在しないというエラーが表示されます。

protected void Button1_Click(object sender, EventArgs e) 
{ 
    int answer = 5; 
} 

protected void Button2_Click(object sender, EventArgs e) 
{ 
    if (Convert.ToInt32(txtAnswer.Text) == answer) 
    { 
     lblQuestion.Text = "You're Right!"; 
    } 
} 
+0

投稿したコードは、あなたの投稿が示唆していることをしません。「変数を値で初期化し、もう1つは変数の値を使用する」。 –

+0

2番目のボタンのif文は、最初のボタンで初期化された変数 "answer"の値を使用することになっています。 – AIGorithmGuy

答えて

2

あなたanswer変数はクリックイベントハンドラにローカルである:ここでは

は私のコードがどのように見えるかの例です。それはそれの外には存在しません。あなたは、フィールドを定義する必要があります。

一般的なルールとして
int answer; 
protected void Button1_Click(object sender, EventArgs e) 
{ 
    answer = 5; 
} 

:中括弧内のすべては(あなたがpublicまたはinternalのように、可視性を定義することができる場合を除く)のみを括弧内に表示されます。これはscopeと呼ばれます。

ページが送信されると値が失われることに注意してください。要求間で値を保持したい場合は、値をより永続的な方法で保管する必要があります(たとえば、ビュー状態)。

+0

それはうまくいった、ありがとう。 – AIGorithmGuy

+0

@Allそれは働いてはいけません。 Webフォームでは、ポストバックごとにページクラスが再作成されます。つまり、フィールド(回答)の値が失われます。ページの読み込み時に値を設定するか、宣言を行う同じステートメント内の変数を初期化するか、値を永続データストアに格納する必要があります。それはあなたのために働いていますか? – mason

+0

Webフォームページのライフサイクルを完全に無視するという点を除いて、この回答は良いでしょう。これに対処するためにあなたの答えを更新してください。 – mason

関連する問題