2017-12-28 30 views
0

Windowsフォームに「ローリング番号」を約10秒間作成したいと考えています。C#ローリング番号Windowsフォーム

私はループで試しましたが、テキストラベルを更新する際にリフレッシュ(フォームがフリーズし、ループが完了したときに更新される)に問題があります。それはあなたのフォームと1つのタイマーの悪い英語^^

+0

ようこそ。ヘルプセンター(https://stackoverflow.com/help/ –

+3

)を見てください。UIスレッドで単純なループを実行すると、終了するまでプログラム全体がフリーズします。 "ループ"コードを 'BackgroundWorker'に移動するか、' async'/'await'を使ってバックグラウンドスレッド上でコードを実行してみてください。 – Alejandro

+0

System.Windows.Forms.Timerを使用して、次の番号でUIを更新する関数を呼び出すたびにX tickを使用します。ツールボックスから時間を払うことも簡単な解決策になります。 [関連](https://stackoverflow.com/questions/6169288/execute-specified-function-every-x-seconds) –

答えて

1

ドラッグつのラベルのための

申し訳ありません(コンソール上に作られた)このhttps://youtu.be/Q7JmiCAAqu0のように見えるとき

それはいいだろう。 'InitializeComponent();の後に次のコードを挿入します。説明

 const int maximum = 100; 
     int actual = 0; 
     timer1.Interval = 100; 
     timer1.Enabled = true; 
     timer1.Tick += (sender, args) => 
     { 
      label1.Text = (actual++ % maximum).ToString(); 
     }; 

  • ラベルが
  • タイマーが操作を実行するために使用されたローリング番号を表示するために使用されている(私たちの場合は100ミリ秒ごとに= 0.1秒)ごとのNミリ秒
  • const int maximum = 100; //表示する最大数を定義します
  • int実際の値は0です; //は一度に表示している実際の番号を表します
  • timer1.Interval = 100; // timer1.Tickが呼び出される間隔(ここでは100ms)
  • timer1.Enabled = true; // Tickを呼び出さずにタイマーを有効にする
  • timer1.Tick + =(送信者、引数)=> { label1.Text =(実際の++%最大).ToString(); //テキストを次のように設定します。actual + 1 modulo 100 };

EDIT:剰余についての情報:StackOverflowのにhttps://en.wikipedia.org/wiki/Modulo_operation

+0

ありがとうございました。 –