Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
アナログ時計を作成中
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=9436#CommentId13420
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
2009/11/5 07:07:49
> 時計の針が一本廻って動くだけです。どうしたら三本ちゃんと動かせるのでしょうか?
まず、長針/短針/秒針の座標が、いずれも CX, CY, EX, EY ですよね。
つまり、すべて同じ座標であるため、重なって 1 本のように表示されてしまっています。
(本来は、それぞれ違う座標になるはずです)
また、たとえ座標が正しかったとしても、ループ内の処理が良くありません。
提示されたコードでは、最内部のループ(J)内で画面をクリアしてから秒針を描いていますが、
その他の針は最内部では描かれていません。J を脱出して I のループになれば長針が描かれますが、
せっかく描いた長針も、次の g.Clear でまた消されてしまい、秒針のみの状態に戻ってしまいます。
まずは、その他の針の座標を正しく計算する事から始めてみてください。
あとは画面を Clear するたびに、毎回、3本の針を DrawLine すれば良いかと。
ただ、それとは別の問題も数多く見受けられます。
・使用したペンが破棄されていません。自分で作成した Pen は、使用後に必ず
Houp.Dispose() / Minp.Dispose() / Secp.Dispose() するようにしてください。
・CreateGraphics は、基本的に使わないでください。描画処理は、Button1 の Click で
行うのではなく、PictureBox1 の Paint イベントで e.Graphics に対して行うようにします。
・空のループ処理は避けてください。待機時間が CPU 性能に依存してしまいますし、
CPU 負荷が跳ね上がってしまい、フォームの移動等すら行えない状態になってしまいます。
このような場合には、ループではなく Timer コントロールを使うようにします。Tick イベントで、
PictureBox1.Invalidate を呼び出して、PictureBox1 の Paint イベントが
定期的に呼び出されるようにすると良いでしょう。