投稿者 魔界の仮面弁士  (社会人) 投稿日時 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 メソッドの
違いまで語りたいところですが、いったんここまで。