Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
VB PictureBox と ShapeContainer について
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30534#CommentId84165
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
2020/9/7 22:10:58
> 「例題でわかるVisual Basic .NET」 東京電機大学出版局
(母校だ…!)
読んだことは無いですが、2004年出版の物らしいので、流石に内容が古すぎる気がします。
読まずに批評したくはないですが……15年以上前のものですよね。
「ジェネリック」や「WFP」が登場する前の代物ですし、個人的にはお奨めしかねます。
VB には何度か大きな技術変革がありますが、その最初の波が 2005 年でした。
目次を見る限りでは、本当に基礎の基礎部分のみの内容ではありそうなので、
バージョン依存性がそこまで激しいわけでは無いと思いますが、ちょっと心配です。
たとえば、当時使われていた ArrayList コレクションなどは、現在は推奨されなくなっていますし、
今と当時とでは、For ループの書き方一つとっても微妙に異なってきます。
> Visual Basic にレイヤーがあることを初めて知りました。
説明のためにレイヤーという言葉を使いはしましたが、そういう表現が、
VB のマニュアル上に出てくるわけではないですけれどね。
> CADをかじったことがあるので、レイヤーの説明はおぼろげながら理解しました。
Graphics クラスでの「描画処理」だけであれば、レイヤー的な表現を実装することは可能です。
しかし、既存のコントロールの上に覆いかぶさるような描画処理を
Windows Forms で実装することは現実的ではありません。
> ShapeContainer を利用する場合、
デザイン時に配置できるのでお手軽ではありますが、単に描画目的だけであれば、
直接 Graphics クラスで描画した方が融通が利くことも多いです。
ただし、各シェイプは実行時にマウスで選択可能となっていますので、
単に描画するだけではなく、選択可能な描画オブジェクトとして画面に配置するような
目的では便利だと思います。
> この場合も、 Timer1.Tick の中でこれらを処理するのは不自然ですか?
Graphics を操作するのは不自然な実装になりがちですが、
TextBox を書き換えるのは、さほど不自然では無いですね。
(たとえば、Timer 内で CreateGraphics メソッドを使ったりするのは不自然です)
> 私は Timer1.Tick の中に
> 1.テキストボックスに「日時+曜日+時刻」を表示する
Tick イベントでも Click イベントでもそうですが、イベント内で処理した結果は
画面に直ちに反映されるわけではありません。
イベント内で Label や TextBox 等の Text プロパティを書き換えたとしても、
イベント処理中はビジー状態となるため、画面には即座に反映されません。
イベント処理が終わってアイドリング状態になった時にはじめて、画面に反映されます。
画面への描画処理は、Tick イベントとは別のタイミング(Paint イベント等)で
発生するようにできています。それ以外のタイミングで PictureBox を
不用意に再描画すれば、ちらつきを生みやすくなります。
PictureBox への描画処理について話すならば、Invalidate / Update / Refresh メソッドの
違いまで語りたいところですが、いったんここまで。