投稿者 魔界の仮面弁士  (社会人) 投稿日時 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 イベントが
 定期的に呼び出されるようにすると良いでしょう。