- PR -

Form上に配置した多数のPictureBoxの表示

投稿者投稿内容
ヴィンソル
会議室デビュー日: 2006/10/06
投稿数: 9
投稿日時: 2006-10-12 15:14
以前投稿したことに関連しますが、ひとつのForm上に10個程度のPictureBoxを配置しておき ShowDialog を実行した場合、10個のPictureBoxがパラパラと表示されてしまいます。
VisibleをFalseにしておいてFormのLoadイベントでTrueにしたりと試したのですがうまくいきません。

マシンスペックにもよると思いますが、同じようなプログラムをVB6で実行するとほとんど瞬間的に表示することができます。

VB.NETでVB6のような処理結果を得ることはできないのでしょうか?
masa
大ベテラン
会議室デビュー日: 2004/10/28
投稿数: 161
投稿日時: 2006-10-12 16:05
Load イベントで画像をセットしたりしてはいませんか?

もしそうなら、画像をセットするメソッドを定義し、
ShowDialog の前にそのメソッドを呼び出すようにしてはどうですか?

ほうぼうで説明されていますが、Load イベント ≠ 初期処理 です。
ヴィンソル
会議室デビュー日: 2006/10/06
投稿数: 9
投稿日時: 2006-10-12 16:18
ご回答ありがとうございます。

最初の段階ではPictureBoxには何も入れていません。
ただし、色をTransparentに設定しています。
この状況でFormを表示するときにTransparentに設定したPictureBoxが
一瞬見えてしまいます。
Formの表示が落ち着くと当然といいますかPictureBox自体はまったく
見えない状態になります。

Loadイベント≠初期処理
というのは始めたばかりと言うこともあって知りませんでした。
貴重なご教示、ありがとうございました。
masa
大ベテラン
会議室デビュー日: 2004/10/28
投稿数: 161
投稿日時: 2006-10-12 16:55
見えなくしたいのであれば、単純に Visible = false でいいのではないですか?
もちろん、デザイン時か、Load よりも前に false にしておかないと
一瞬見えるかもしれません。

VB6 でも Loadイベント≠初期処理 ですよ。
Load で初期処理を書く風習が浸透していただけのことで。
ヴィンソル
会議室デビュー日: 2006/10/06
投稿数: 9
投稿日時: 2006-10-12 17:09
もうひとつ問題点が発生してしまいますが...

PictureBoxですが、VisibleがFalseの場合には
イベントをとってくれませんよね?
それで、イベントを取得できるようにするためには
どこかでVisibleをTrueにする必要があると思いますが、
Formの表示が完了したときに発生するようなイベントが
あればいいのですが、これがわかりません。

VB6時代ですが、Timerコントロールを使って若干の
タイムラグを持たせてからあTimerコントロールの
Timerイベント中に初期処理を書いたことがありますが、
このような方法は何か問題があるでしょうか?
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2006-10-12 17:22
引用:

Formの表示が完了したときに発生するようなイベントが
あればいいのですが、これがわかりません。


2005ならShownイベントがあります。
2003ならActivateイベントでLoadイベント直後かどうかを自前のフラグで判断になるでしょう。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-10-12 18:39
引用:

まどかさんの書き込み (2006-10-12 17:22) より:

2003ならActivateイベントでLoadイベント直後かどうかを自前のフラグで判断になるでしょう。


Activated イベントですね。
事前に AddHandler しておいて、Activated イベントの Finally にて RemoveHandler でしょうか。

Context によっては、Application.Idle イベントでも良いかもしれません。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ヴィンソル
会議室デビュー日: 2006/10/06
投稿数: 9
投稿日時: 2006-10-12 19:23
みなさん、ありがとうございました。
スマートなやり方ではないと思いますが、とりあえずタイマーを使って目的を達することができました。

スキルアップ/キャリアアップ(JOB@IT)