1

ですから、この特定のセットでのタスクの終わりに近づいています...タイマーが作動するたびに楕円を描画しようとしています。タイマーはデフォルトで有効になっており、各タイマーティックの間隔は100msです。デバッグを実行すると、1つの楕円がキャンバスに描画され、それ以上は描画されません-タイマーティックごとに描画される楕円の任意の量を設定するために、forループとwhileループをすでに試しましたが、それは機能しませんでした。理想的には、タイマーのオンとオフを切り替えるボタンを作成したいと思います(以前に解決された問題のおかげで、これを行う方法についていくつかのアイデアがあります)。最初にタイマーのコードを取得したいと思います。以下は私がこれまでに何とか取得したコードです:

private: System::Void timer1_Tick(System::Object^  sender, System::EventArgs^  e) 
         {
             Random^ rGen;
             timer1->Enabled = true;

             Graphics^ mainCanvas = CreateGraphics();

             // while loop to set upper limit for no# of ellipses
             // note: this is just for testing - would like to have
             // ellipses drawn automatically at random etc.
             int i = 0;
             while(i < 20)
             {
             rGen = gcnew Random();
             Brush^ greenBrush = gcnew SolidBrush(Color::Green);
             static int randX = rGen->Next(Width); //random x co-ordinate
             static int randY = rGen->Next(Height); //random y co-ordinate
             static int randWidth = rGen->Next(100); //random ellipse width
             static int randHeight = rGen->Next(100); //random ellipse height
             mainCanvas->FillEllipse(greenBrush, randX,randY,randWidth,randHeight);
             i++;
             }
         }

私はおそらく1つか2つの重要なことを見逃しているだけです。また、C#とASP.NETを同時に学んでいるので、頭が爆発しそうになり、たくさん詰め込まれています。どんな助けでも大歓迎です:)。

4

2 に答える 2

2
 static int randX = rGen->Next(Width);

staticキーワードは、ここでの敵です。ローカル変数の前に使用すると、変数が1回だけ初期化されることが保証されます。したがって、まったく同じ楕円を描くだけです。デバッガーを使用すると見やすくなります。

于 2012-07-21T11:38:06.857 に答える
0

簡単なヒントです。このメソッドの外部でタイマーを有効にしてください。すでに有効になっている可能性がありますが、ここで確認することはできません。これにより、実際にメソッドを入力できるようになります。@Hansが言ったように、統計を削除します。

于 2012-07-22T21:31:47.740 に答える