投稿者 VB+VC# Beginner  (社会人) 投稿日時 2020/10/12 21:59:27
 魔界の仮面弁士様
9/7に返答して頂いていましたことに、2・3日前に初めて気づき、
お礼が遅れましたこと、大変失礼致しました。
前回、
Private Sub Timer_Tick(sender As Object, e As EventArgs)
    PictureBox.Invalidate()
end Sub

Private Sub PictureBox_Paint(sender As Object, e As PaintEventArgs)
    Dim g As Graphics = e.Graphics
    g.SmoothingMode = SmoothingMode.HighQuality
    ....
end Sub

を試して、ようやく正常に動作することができました。

Public g As Graphics
Private Sub Timer_Tick(sender As Object, e As EventArgs)
    PictureBox.Refresh()
    g = PictureBox.CreateGraphics()
    g.SmoothingMode = SmoothingMode.HighQuality

end Sub

と記述していたので、『 Refresh() 』を『 Invalidate() 』に変えても、
直らず、『 Public g As Graphics 』 と宣言していたため、
『 Dim g As Graphics = e.Graphics 』と記述することができなかったのが原因でした。

その間、コードの中で、
Button
Label()
PictureBox
Timer
ShapeContainer
LineShape()
等を作ることができることを知り、
(ShapeContainer と LineShape の作り方を調べているとき、魔界の仮面弁士様の過去の投稿を
 発見し、大変ヒントになりました。)
自分の中では、
「フォームエディターでは、Form のみ定義し、後はコードの中で定義するのが一番作りやすい」
と思うようになってきました。
また、アナログ時計に関しては、
① Graphics で表示するのは、非常に簡単ではあるが、私には、文字盤
  (外周円と目盛と時間を示す数字)は最初に一度だけ書いて、時計の3つの針だけを
  書き直せばいいのではないか?
② おまけに、前述の間違った方法のせいで、画面がパカパカ点滅する。
  (これは解決しました。)
③ 面倒ではあるが、LineShape() で目盛を用意しておいて、3つの針の開始点( StartPoint )のみを
  書き直せば針は回転する。
  LineShape(i) として利用できるので、私は大変重宝しています。 
という考えを持っています。
そこで、新たな質問です。

④ 『 Dim g As Graphics = e.Graphics 』はペイントイベントで書きますが、ペイントイベントの中に
  サブルーチンを作って、『 g 』を継承することはできませんか?
  私のテストでは、実現できませんでした。
⑤  Graphics で記述する方法で、
  文字盤のところは一度書いたら、そのままにしておき、中の3本の針(+中心点)だけを
  書き換えることはできますか?
  私の Form の ClientSize と PictureBox は正方形なので、
    例えば、正方形の日の丸の中央の円の中だけを書き換えたいのです。
⑥ 『 Invalidate / Update / Refresh メソッド 』については、全くわかりません。
  https://dobon.net/vb/dotnet/control/refreshupdateinvalidate.html
  様の記述を読み、テスト用の実行ファイルを使っても理解できません。

魔界の仮面弁士様の説明は詳しくて丁寧なので、また追加質問をしてしまいました。
宜しくお願い致します。