- PR -

フォーム表示時のチラつき

投稿者投稿内容
extream
ベテラン
会議室デビュー日: 2005/12/26
投稿数: 83
投稿日時: 2006-01-30 16:09
Form1からForm2を開く際、
 Form2.ShowDialog();
とやっているのですが、Form2_Load()中にDB検索を行い、データがない場合は画面を表示しないようにしたいのですが、一瞬Form2が表示されてしまい、画面がチラついてしまいます。

画面をチラつかないようにすることは可能なのでしょうか?
extream
ベテラン
会議室デビュー日: 2005/12/26
投稿数: 83
投稿日時: 2006-01-30 16:30
ちなみに、ソースは下記のようにしています。
デバッグで追ってみたところ、returnでForm2_Load()を終え、直後に一瞬画面が表示されてからフォームが閉じました。

private void Form2_Load(object sender, System.EventArgs e)
{
<処理>

if (dataCount == 0)
{
this.DialogResult = DialogResult.OK;
this.Close();
return;
}

  <処理>
}
なおこ(・∀・)
大ベテラン
会議室デビュー日: 2004/04/08
投稿数: 174
お住まい・勤務地: 東京都
投稿日時: 2006-01-30 16:39
お世話になります。

Form1 でデータを取得して、
データがあった時だけ、Form2 を表示するのが一番無駄が無いと思いますが。
いかがでしょうか。
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2006-01-30 16:42
引用:

Form1からForm2を開く際、
 Form2.ShowDialog();
とやっているのですが、Form2_Load()中にDB検索を行い、データがない場合は画面を表示しないようにしたいのですが、一瞬Form2が表示されてしまい、画面がチラついてしまいます。
画面をチラつかないようにすることは可能なのでしょうか?


Loadは「表示される直前に発生します」と書いてあります。
なのでチラつくという表現はある意味正しくありません。
#そもそも表示(ShowDialog)していますし。

データが無い場合の仕様によるでしょう。
つまり、そのフォームに「データ無し」と表示するのか、今回のようにそもそも表示しないのか。
・表示前に親側で検索
・一旦初期表示して検索(Activateイベントで処理(初回のみという条件も考慮))
のいずれかになるのではないでしょうか。
結果フォームに検索の実装があるならShowの前にそのカスタムメソッドを呼ぶということもできます。

Loadは表示のための前処理なので描画のための処理に限定することが推奨されます。
重いと表示までの体感速度が極端に悪くなりますし。
extream
ベテラン
会議室デビュー日: 2005/12/26
投稿数: 83
投稿日時: 2006-01-30 19:27
みなさま、返答ありがとうございます。

Form1でデータ取得処理を行い、データがない場合はForm2を表示しないようにすべきだったんですが、その事に後で気がついたので、どうにかならないものかと思い、質問しました。
ですが、やはり誤魔化していると後で痛い目を見そうなので、現在の処理を変え、まどか様やなおこ様の言われるように、処理方法を変えます。

低レベルな質問をして申し訳ありませんでしたm(__)m
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-30 22:35
引用:

extreamさんの書き込み (2006-01-30 19:27) より:

Form1でデータ取得処理を行い、データがない場合はForm2を表示しないようにすべきだったんですが、その事に後で気がついたので、どうにかならないものかと思い、質問しました。


開く必要があるかどうかわからないのに、Form をインスタンス化するのもですが、
Form にビジネスロジックを実装するのもダメでしょう。

似たような回答を最近どこかで付けた記憶があります。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=27642&forum=7

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
nanbu
大ベテラン
会議室デビュー日: 2004/08/19
投稿数: 178
投稿日時: 2006-01-31 00:51
南部です。

引用:

じゃんぬねっとさんの書き込み (2006-01-30 22:35) より:
開く必要があるかどうかわからないのに、Form をインスタンス化するのもですが、
Form にビジネスロジックを実装するのもダメでしょう。


検索結果表示用モーダルダイアログであるForm2のインスタンスを
予め生成しておくのは、私は「あり」だと思います。

--以下推測--
Form2が検索結果画面であり、Form1が検索条件決定画面であると推測しましたが、
Form1のユーザイベントで検索する以前にデータの有無が判るのであれば、
そのイベントの元(検索ボタン等)を無効すればいいのであって、そうでないなら
Form2ロード中に検索にいくことも、私は「あり」だと思います。
検索に時間がかかるのであれば、「検索中」って表示して、
非同期で検索すればいいことですし。

かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-01-31 01:06
引用:

じゃんぬねっとさんの書き込み (2006-01-30 22:35) より:

開く必要があるかどうかわからないのに、Form をインスタンス化するのもですが、
Form にビジネスロジックを実装するのもダメでしょう。



「誰がそのビジネスロジックを呼び出すのか」っていうのもありますよね。
ダイアログ側で一覧表示するならダイアログ側で検索を行うのが普通な気もします

インスタンスを作って検索処理を行ったあとに、表示する・しない
を判断するって言うのもあると思うんですけど

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