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

最初のフォームを閉じる方法

環境/言語:[WindowsXP,VB.NET2003]
分類:[.NET]

初めて、書き込みさせていただきます。

VBAの経験はありますが、VB.NETは最近になって基礎編と応用編の本を買って勉強し始めたばかりの者です。

今Oracleに接続するためのログオン画面を作成しています。
ログイン後は、別フォームのメニュー画面を表示します。
本にVBのサンプルが載っていましたので、それを見ながら作成しました。
ユーザー名とパスワードを入力して、ログオンボタンをクリックすると、
メニュー画面が開くというところまでは、うまく行きました。
ただ、メニュー画面を開く前にログオン画面を閉じるということが出来ません。
ログオン画面をモードレスフォームで作成すると、ログオン画面が開くと
すぐに閉じてしまいます。そのため、ログオン画面をモーダルフォームで
作成したのですが、コードにMe.close()を書いてあってもログオン画面を
閉じないでメニュー画面が開かれます。

起動は、スタートアップの設定でSub Main()として、Sub Main()の中で、
ログオン画面を開いています。

以下は、本に載っていたメニュー画面を開くためのコードの最後のところです。

Unload Me
F_Menu.Show
Exit Sub
となっていましたので、
Dim frmMenu as New F_Menu()
----------------
----------------

Me.Close()
frmMenu.show()
Exit Sub

としています。
最初のフォームを閉じるとプログラムが終わってしまうということも、
書いてあったように記憶しています。

FORM1を開く→FORM1を閉じる→FORM2を開くということを行うには
どのように設定すればいいのでしょうか?

よろしく、ご教授ください。
ログオン画面の方は呼び出し側よりShowDialogメソッドで開きましょう。
で、ログオンが成功したならDialogResultを設定して結果がOKなら
メニュー画面を開くとか。
■No1488に返信(Sugi@み〜くんパパの仕事部屋さんの記事)
Sugi@み〜くんパパの仕事部屋さん、お返事ありがとうございました。

教えていただいた内容を理解しようと、昨日からHELPとにらめっこ
しているのですが、どうもよくわかりません。
ログオン画面のボタンのプロパティでDialogResultにokを選択して、
ログオンのコードの中に
Dim button1 as new button

if button1.DialogResult = DialogResult.ok
then frm_menu.show()
end if

と追加してみたのですが、うまく行きませんでした。

根本のところで別の本には、
VB.NETではMainプロシージャの終了とともにEXEが終了してしまいますので、
Showメソッドでは不適切です。そのため、Application.Runメソッドが
必要となります。
と書かれていました。
ただ、これもうまく行きませんでした。

今現在は、Mainプロシージャをやめて、まずオープニングフォームを
開き、そこからログオンフォームを呼び出すようにしてやってみてます。

> ログオン画面の方は呼び出し側よりShowDialogメソッドで開きましょう。

ここからなら、ログオン画面のShowDialogメソッドはうまく行きました。
また、ログオン後にログオン画面を消してメニュー画面が出るところも
うまく行きました。
今は、メニュー画面からサブメニュー画面に展開するとき
メニュー画面を閉じるのですが、サブメニュー画面を終了し、再度メニュー画面
を開くところが、うまく行ってません。

VB.NETは、本を読んでいると「へぇー、こんなことが簡単にできるんだぁ」と感動
することも多いですが、実際プログラミングをしてみると、左手に箸を持って
茶碗のご飯を食べてるような、なんとも歯がゆい状態に陥ってる状態です。

これからまた色々とやってみます。
できれば、参考になるホームページなどを教えて頂けたらありがたいです。

今回はどうもありがとうございました。
解決済み!
適当なクラスを作り、Mainメソッドを作成します

Public Class Class1

    Shared Sub Main()

        Dim f As Form1 = New Form1()
        f.ShowDialog()
        System.Windows.Forms.Application.Run()

    End Sub

End Class

プロジェクトのプロパティ、スタートアップの設定で、「Sub Main]を選択しましょう。
ただし、この方法だと、すべてのフォームを閉じてもClass1のインスタンスは生きているのでアプリケーションは終了しません。
きちんとApplication.Endで終了しましょう。

一般には、ログオン画面を利用したアプリケーションを作成する場合、素直にログオン画面をスタートアップにし、ログオン成功後はログオン画面は閉じずに非表示にするという方法がよくとられます。(簡単だから&業務終了後にログオン画面を再表示させるという仕様になったときに対応が楽)
Mikeさん、どうもありがとうございます。

教えていただいた通り試してみたら、うまく行きました。
オープニングフォームを開くやり方より、全然スマートですね。

> 一般には、ログオン画面を利用したアプリケーションを作成する場合、素直に
>ログオン画面をスタートアップにし、ログオン成功後はログオン画面は閉じずに
>非表示にするという方法がよくとられます。(簡単だから&業務終了後にログオ
>ン画面を再表示させるという仕様になったときに対応が楽)

なるほど、フォームを非表示という方法があるんですね。感心しました。
これ、いただきます。
さっそくこの方法に作り替えてみます。

ありがとうございました。
解決済み!

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