DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Tipsの「スプラッシュウィンドウを表示する」について

環境/言語:[環境(XP)、使用言語(VB.NET2003)]
分類:[.NET]

Netでの開発を始めて間がない者で
いろいろと勉強させていただいてます。

早速ですがTipsに書かれてあります「SPLASHWindowを表示する」の件で
教えてください。
DB接続の確認処理をSplash中に行いたいと思っています。

(概要)
1)フォームは、FrmSplash、FrmStart、FrmMainとあります。
2)FrmStartを非表示で起動してDB接続の処理中にFrmSplashを表示し
確認が終わったらFrmMainを起動したい。
3)FrmStartをスタートアップの規定にしています。
4)FrmSplashの終わる処理はFrmSplashのクリック時にしたい。
(今は、Activateの処置は抜いてThred処理にしています)

(質問)
FrmStartの画面をFrmSplashをクリックして終了後に
表示にしたいのですが同時に表示されうまくいきません。
サンプルコードと同じようにコードを写したつもりなのですが、
ここが注意という点がありますでしょうか?

MS社の起動フォームを非表示にするという処理がよくわかっていなくて
非表示という処理はNewすることだけで可能なのでしょうか?

初歩的なことだと思いますが、ご教示よろしくお願いします。
こんにちは、じゃんぬ です。

■No12305に返信(ふにゃさんの記事)
> FrmStartの画面をFrmSplashをクリックして終了後に
> 表示にしたいのですが同時に表示されうまくいきません。

何と何が同時に表示されるのですか?
FrmMain と FrmSplash が同時に表示されると補完して宜しいですか?

> サンプルコードと同じようにコードを写したつもりなのですが、
> ここが注意という点がありますでしょうか?

例えば、FrmSplash の Show メソッドの後に、
すぐ FrmMain の Show メソッドを呼び出してませんか?

> MS社の起動フォームを非表示にするという処理がよくわかっていなくて
> 非表示という処理はNewすることだけで可能なのでしょうか?

New するというのは、インスタンス化するということです。(自信がなければ検索してみてください)
インスタンス化していても、Show などが呼び出されない限りは非表示です。
早々のレスをありがとうございます。

> 何と何が同時に表示されるのですか?
> FrmMain と FrmSplash が同時に表示されると補完して宜しいですか?

先ずは、訂正です。スミマセン
概要のところで・・
2)FrmStartを非表示で起動してDB接続の処理中にFrmSplashを表示し
確認が終わったらFrmStartを表示したい
としたいので、FrmSplashとFrmStartが同時に画面表示されます。

> 例えば、FrmSplash の Show メソッドの後に、
> すぐ FrmMain の Show メソッドを呼び出してませんか?

SampleにあるようにFrmStartのSub Mainに
-----------------------------------------------
<STAThread()> _
Shared Sub Main()
  Dim mainStart As New FrmStart

  'スプラッシュウィンドウを表示
  FrmSplash.ShowSplash(mainStart)

  'メインウィンドウを表示
  Application.Run(mainStart)
End Sub
-----------------------------------------------
としています。
この「メインウィンドウの表示」の部分で
FrmStartが表示されると思います。
ココをコメントにすると動きません。

> インスタンス化していても、Show などが呼び出されない限りは非表示です。
Showはしていません。

これもSampleにあるのを使わせていただきました。
---------------------------------------------------
'スレッドで開始するメソッド
Private Shared Sub StartThread()
  'Splashフォームを作成
  _form = New FrmSplash
  'Splashフォームをクリックして閉じられるようにする
  AddHandler _form.Click, AddressOf _form_Click
  'Splashフォームを表示する
  Application.Run(_form)
End Sub
----------------------------------------------------

なんとなくSub MainのApplication.Run(mainStart)に行く前に
FrmSplashがクリックされたかどうかの
判定文が必要な気がするんですけど
入れるとそこで止まってしまいます。

Sampleをそのまま作ってみても
やはり2画面になります。
非表示にするには。。。っていうところが
あやしそうなんですけど
----------------------------------------------
<STAThread()> _
Shared Sub Main()
Dim mainForm As New Form1

'スプラッシュウィンドウを表示
SplashForm.ShowSplash(mainForm)

'メインウィンドウを表示
Application.Run(mainForm)  
  ↑
  ここが疑問
  先にThredでRunしているのに再度Runですか?
End Sub
-----------------------------------------------

的外れな返答・質問をしているかもしれませんが
よろしくお願いいたします。
お騒がせしました。
その後、あれこれと触ってみて・・・

Splashの画面をクリックしたときにだけ次の動作に行って
Splashの画面を消したかったので_mainForm_Activatedでの処理を
コメントアウトしていたのですが
確かにコメントアウトしても
Startの画面は起動しますよね。
だからそのまま処理が流れて画面が二つたっていたようです。

クリックするまでポーズするという処理があれば
Startの画面起動をとめれるわけで・・・と思ったんですが
判定フラグを入れてもそこでとまってくれるわけではなくて
そのまま全部終わってしまいますね。
次の指示が入るまで待つという動作は、何を使えばいいのでしょう?
> クリックするまでポーズするという処理があれば
> Startの画面起動をとめれるわけで・・・と思ったんですが
> 判定フラグを入れてもそこでとまってくれるわけではなくて
> そのまま全部終わってしまいますね。
> 次の指示が入るまで待つという動作は、何を使えばいいのでしょう?

通常は待機ハンドルということになるのではないでしょうか。

CodeZine:.NETマルチスレッドプログラミング 2:非同期デリゲートとスレッドプール
http://codezine.jp/a/article.aspx?aid=139#waithandle
■No12330に返信(管理人さんの記事)
> 通常は待機ハンドルということになるのではないでしょうか。
>
> CodeZine:.NETマルチスレッドプログラミング 2:非同期デリゲートとスレッドプール
> http://codezine.jp/a/article.aspx?aid=139#waithandle
>

ありがとうございます。
起動時に出すSplashをほかのところ処理待ち中にも
つかいたくて悩んでいます。
なんとなく動きはわかるものの
今の能力に比べやりたいことのレベルが高いようです。
当初の疑問は解決しましたのでひとまず「解決」として
再度、もうすこし疑問点を絞って出直します。

ご教示いただきました方、ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板