- - PR -
Form上に配置した多数のPictureBoxの表示
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-10-12 15:14
以前投稿したことに関連しますが、ひとつのForm上に10個程度のPictureBoxを配置しておき ShowDialog を実行した場合、10個のPictureBoxがパラパラと表示されてしまいます。
VisibleをFalseにしておいてFormのLoadイベントでTrueにしたりと試したのですがうまくいきません。 マシンスペックにもよると思いますが、同じようなプログラムをVB6で実行するとほとんど瞬間的に表示することができます。 VB.NETでVB6のような処理結果を得ることはできないのでしょうか? | ||||
|
投稿日時: 2006-10-12 16:05
Load イベントで画像をセットしたりしてはいませんか?
もしそうなら、画像をセットするメソッドを定義し、 ShowDialog の前にそのメソッドを呼び出すようにしてはどうですか? ほうぼうで説明されていますが、Load イベント ≠ 初期処理 です。 | ||||
|
投稿日時: 2006-10-12 16:18
ご回答ありがとうございます。
最初の段階ではPictureBoxには何も入れていません。 ただし、色をTransparentに設定しています。 この状況でFormを表示するときにTransparentに設定したPictureBoxが 一瞬見えてしまいます。 Formの表示が落ち着くと当然といいますかPictureBox自体はまったく 見えない状態になります。 Loadイベント≠初期処理 というのは始めたばかりと言うこともあって知りませんでした。 貴重なご教示、ありがとうございました。 | ||||
|
投稿日時: 2006-10-12 16:55
見えなくしたいのであれば、単純に Visible = false でいいのではないですか?
もちろん、デザイン時か、Load よりも前に false にしておかないと 一瞬見えるかもしれません。 VB6 でも Loadイベント≠初期処理 ですよ。 Load で初期処理を書く風習が浸透していただけのことで。 | ||||
|
投稿日時: 2006-10-12 17:09
もうひとつ問題点が発生してしまいますが...
PictureBoxですが、VisibleがFalseの場合には イベントをとってくれませんよね? それで、イベントを取得できるようにするためには どこかでVisibleをTrueにする必要があると思いますが、 Formの表示が完了したときに発生するようなイベントが あればいいのですが、これがわかりません。 VB6時代ですが、Timerコントロールを使って若干の タイムラグを持たせてからあTimerコントロールの Timerイベント中に初期処理を書いたことがありますが、 このような方法は何か問題があるでしょうか? | ||||
|
投稿日時: 2006-10-12 17:22
2005ならShownイベントがあります。 2003ならActivateイベントでLoadイベント直後かどうかを自前のフラグで判断になるでしょう。 | ||||
|
投稿日時: 2006-10-12 18:39
Activated イベントですね。 事前に AddHandler しておいて、Activated イベントの Finally にて RemoveHandler でしょうか。 Context によっては、Application.Idle イベントでも良いかもしれません。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-10-12 19:23
みなさん、ありがとうございました。
スマートなやり方ではないと思いますが、とりあえずタイマーを使って目的を達することができました。 |