Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
VB PictureBox と ShapeContainer について
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30534#CommentId84245
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
VB+VC# Beginner
 (社会人)
投稿日時
2020/10/15 23:59:40
魔界の仮面弁士様
こんばんは。
先日書きこんでいただいた内容をゆっくり読んでみました。
『 Invalidate / Update / Refresh メソッド 』について、
実験結果からある程度分かってきました。
ありがとうございます。
『 もしも PictureBox を矩形(正方形/長方形)以外の形状にしたい場合には、
Region プロパティを使うことができます。
https://dobon.net/vb/dotnet/form/formregion.html 』
とても参考になりました。
① PictureBox を2つ
(もう一度「日の丸」を例にしますと、外側の白い部分と内側の赤い円の部分)
に分割することによって、外側の目盛等は1回だけ、内側の針と中央の点は毎秒
描画することができました。
② 今回の質問の一番最初に、「 PictureBox を作ると針が消えてしまう 」問題も、
PictureBox に円をくりぬくことによって、解決しました。
上記の変更を試行錯誤しながら行っているうちに、新たな疑問が出てきました。
その説明の前に、私の時計の具体的な大きさを書きますと、
フォームのクライアントサイズは「 1000 x 1000 」
原点の位置を変更する方法を知らない時に作り始めましたので、原点は左上で
時計の中心の座標は (500,500) です。
数字や目盛は全て半径 400 以上、針は半径 350 以下なので、今回の内側の領域は
半径 375 つまり、「 750 x 750 」です。
①の場合、
path.AddEllipse(New Rectangle(500 - 375, 500 - 375, 375 * 2, 375 * 2))
の円をくりぬきましたので、内側に配置する針と点は、元の中心点 (500,500) ではなく、
新しい領域の中心点 (375,375) を基準にして描画しないと、フォームの中心に
描画されませんでした。その時は、「円の内側の領域は領域の左上が 125 ずれた分、
中心がずれたのかな」と理解しました。
ところが、②の場合、ShapeContainer の領域を
.SetBounds(500 - 375, 500 - 375, 375 * 2, 375 * 2)
.SetBounds(0, 0, 1000, 1000)
のどちらにしても、針の EndPoint ゃ中央の点の座標は (500,500) にしないと、
正しく描画されません。
ということは、PictureBox に円をくりぬきさえすれば、ShapeContainer の
位置やサイズは変更する必要がないのでしょうか?
取り敢えず、①・②とも、希望通りに動いてくれているので問題ないのですが、
記述方法が異なる理由が知りたくて、質問させて頂きました。
説明が拙くて、わかりづらくなってすみません。