2

私は C++ プログラミングを少しやったことがありますが、C# は初めてです。

ユーザーがボタンをクリックした回数をカウントし、そのカウントをボタンに表示する簡単なアプリを作成しました。

最初のクリックでは機能しますが、その後は 1 のままです。何か提案はありますか? 前もって感謝します

public partial class Default : System.Web.UI.Page
{
    private int clickcount = 0;
    public virtual void button1Clicked (object sender, EventArgs args)
    {
        clickcount++;
        button1.Text = "You clicked me "+clickcount.ToString()+" time";
    }
    public virtual void GreetButtonClicked (object sender, EventArgs args)
    {
        GreetButton.Text = "Hello "+TextInput.Text;
    }
     }      
4

6 に答える 6

4

ページが作成されるたびにカウントをゼロに設定しています。これ:

private int clickcount = 0;

これとほぼ同じです:

private int clickcount;

public Default()
{
    clickcount = 0;
}

ページがリクエストされるたびにコンストラクターが呼び出されるため、常に値をゼロにリセットします。

これをどのように解決するかは、何を数えようとしているかによって異なります。たとえば、現在のセッションのクリック数をカウントする場合は、セッション変数を使用してカウントを保存する必要があります。

次の Web ページを読んで、状態を保存できる場所と、さまざまな目的に最適なストレージの種類の概要を把握することをお勧めします。

于 2012-06-10T18:51:44.610 に答える
2

Webページはデータを自動的に保持しないためclickcount、サーバーによるページのレンダリングが完了するまで、の値はメモリに保持されるだけです。次にボタンをクリックすると、カウンターは0にリセットされます。ポストバック(ページの読み込み)間でデータを保持する場合は、データを、などのどこかにSessionViewStateまたはデータベースに保存する必要があります。

コードから変更した1つの例を次に示します。

public partial class Default : System.Web.UI.Page 
{ 
    private int clickcount = 0; 
    public virtual void button1Clicked (object sender, EventArgs args) 
    { 
        if (Session["clickcount"] != null)
            clickcount = (int)Session["clickcount"];

        clickcount++; 
        Session["clickcount"] = clickcount;

        button1.Text = "You clicked me "+clickcount.ToString()+" time"; 
    } 
    public virtual void GreetButtonClicked (object sender, EventArgs args) 
    { 
        GreetButton.Text = "Hello "+TextInput.Text; 
    } 
}
于 2012-06-10T18:54:29.280 に答える
1

セッションやその他の種類の永続性を気にしない場合は、VIEWSTATEを使用してこの値を適切に保持できます。

このようにコードを使用すると、これが機能します。

public partial class Default : System.Web.UI.Page
{
    public int clickcount 
  {
   get
   {
     if(Viewstate["clickcount"] != null)
     {
      return (int)Viewstate["clickcount"]; //Need to cast the viewstate object in int.
     }
     else
     {
        return 0;
      }
  }
   set
   {
     Viewstate.add("clickcount",value);
   }
  }
    public virtual void button1Clicked (object sender, EventArgs args)
    {
        clickcount++;
        button1.Text = "You clicked me "+clickcount.ToString()+" time";
    }
    public virtual void GreetButtonClicked (object sender, EventArgs args)
    {
        GreetButton.Text = "Hello "+TextInput.Text;
    }
     }
于 2012-06-10T18:57:44.550 に答える
1

clickcount は、設定した値 (この場合 --> 0) へのポストバックごとに初期化されるため、ボタンをクリックするたびに 0 に設定されます。private static int にすると、値が実際に増加することがわかります。

    int counter = 0; <-- gets initialized to 0 on each click
    static int counter1 = 0; <--- gets incremented on each click, so 1,2,3 ...

この回答のコメントで指摘されているように、実際にカウンターを使用する予定がある場合は、セッション変数を使用して、ボタンがクリックされた回数を保存することをお勧めします。

于 2012-06-10T18:51:44.547 に答える
0

clickcount静的変数として宣言する必要があります。

于 2012-06-10T18:51:33.217 に答える
0

この問題を解決する簡単な方法があると思います

新しいラベルを追加して、visible = false にすることができます

コードは次のようになります

counter = int.parse(label.text);
counter++;
label.text = counter.ToString();
button.text = "you clicked me "+counter.ToString();
于 2012-06-10T19:59:35.803 に答える