• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C#のlabelの表示について)

C#のlabelの表示について

このQ&Aのポイント
  • C#のlabelを使用して時刻を表示するプログラムで、秒が0になると分の位の画像が移動して元の位置に戻る際に、秒が00ではなく59のままになってしまう問題が発生しています。
  • また、0.8秒かかるループ中にタイマーの呼び出しが実行されているかどうかも不明です。
  • labelとpictureBoxを重ねて配置している際、labelの位置も一緒に移動するようにするために、labelの親コントロールをpictureBoxに変更しました。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

>そのとき秒が「00」とはならず「59」のままで、このループが終わると「00」を飛ばして「01」となります。 グラフィックやPCの処理速度によって、状態が異なると思います。 for (a = 0; a < 10; a++) {   System.Threading.Thread.Sleep(30); } for (a = 0; a < 50; a++) {   System.Threading.Thread.Sleep(10); } 単純にループだけで0.8秒を使用しています。 さらにオブジェクトの座標が描画されるのでそれ+αが、この間に要します。 59→01は、単に処理が追い付いていないだけだと思います。 処理を占有させずに、ピクチャボックスの座標を変更させるように改造をすると良いと思います。 注意すべきは、割り込みを考慮することです。 改造サンプルは、タイマーのTagを利用しています。 private void Form1_Load(object sender, EventArgs e) {   this.timer1.Tag = ""; } private void timer1_Tick(object sender, EventArgs e) {   //現在の時刻を取得   DateTime dt = DateTime.Now;   int Second_1 = dt.Second % 10;   ~略~   label6.Text = Hour_2.ToString();   if (dt.Second == 0 && (this.timer1.Tag.ToString() != dt.ToString("mmss")))   {     this.timer1.Tag = dt.ToString("mmss");     描画();   } } private void 描画() {   Application.DoEvents();   int a;   for (a = 0; a < 10; a++)   {     pictureBox4.Top += 1;     System.Threading.Thread.Sleep(30);   }   for (a = 0; a < 50; a++)   {     pictureBox4.Top += 5;     System.Threading.Thread.Sleep(10);   }   pictureBox4.Top = 12; }

noname#260977
質問者

お礼

お返事が遅くなりすみません。 とても良い勉強になり、無事解決することができました! ありがとうございました^^

関連するQ&A

専門家に質問してみよう