Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
VB PictureBox と ShapeContainer について
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30534#CommentId84238
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
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
様の記述を読み、テスト用の実行ファイルを使っても理解できません。
魔界の仮面弁士様の説明は詳しくて丁寧なので、また追加質問をしてしまいました。
宜しくお願い致します。