• ベストアンサー

【VB.NET2003】フォーム1を閉じてフォーム2を表示させたい

プログラミング初心者でVB.NET2003使用です。 検索したところ、それらしいものがあったのでチャレンジしましたがダメだった(ちょっと違う?)ので質問させていただきます。 http://oshiete1.goo.ne.jp/qa1757174.html 《やりたい事》 Form1に配置したボタン1をクリックするとForm1を閉じてForm2を表示 Form2に配置したボタンAをクリックするとForm2を閉じてForm1を表示する。 これをやりたいのですが、なかなかうまく行きません。 ボタン1をクリックしてForm1を閉じないでForm2をShowかShowDialogでモードレス表示 ボタンAをクリックしてForm2をCloseさせてForm1を表示させる事(元々閉じていないので)は出来ます。 可能ならばどちらかを必ず閉じる方法でやりたいと思います。 可能でしょうか? 解決策やヒント、良いサイトがありましたら回答をお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

Sub Mainでやるのは #1と同じですが オブジェクト『フォーム』の管理をModule1でやってみてはいかがですか Module1に   Dim oForm1 as Form1   Dim oForm2 as Form2   Sub Main     ' Form1を表示     oForm1 = new Form1     oForm1.Show()     Do While TRUE       if oForm1.IsDisposed then         ' Form1が閉じられた場合         if oForm2 is Nothing then           ' Form2が一度も表示されなかった場合           Exit Sub         else if oForm2.IsDisposed then           ' Form2が1回以上表示された場合           Exit Sub         end if       end if       Application.DoEvents()     Loop   End Sub フォーム1上のボタンイベント if oForm2 is Notrhing OrElse oForm2.isDisposed then   oForm2 = new Form2 end if oForm2.Show() me.Close() フォーム2上のボタンイベント if oForm1 is Notrhing OrElse oForm1.isDisposed then   oForm1 = new Form1 end if oForm1.Show() me.Close() といった具合で …

takachan7272
質問者

お礼

回答ありがとうございます。 上から読んで流れが理解できたので、今スグにでも使えそうです。 1つの方法として試してみたいと思います。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

モジュールから実行開始するのはどうでしょうか? まず、プロジェクト->[プロジェクト名]のプロパティ  の、スタートアップの設定 で「sub Main」を選ぶ。 ファイル->新しい項目の追加 で、モジュールを追加 Module Module1 Sub main() Dim f1 As New Form1 f1.Show() Do Application.DoEvents() Loop End Sub End Module とする。 form1のButton1クリックを Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim f2 As New Form2 f2.Show() Me.Close() End Sub とする。 form1のButtonAクリックを Private Sub ButtonA_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonA.Click Dim f1 As New Form1 f1.Show() Me.Close() End Sub とする。 こんなのではどうでしょうか? ただし、このままでは終了できないので、form1にbutton2を作って、 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Application.Exit() End End Sub とかにして、終了するようにしてあげる。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • (VB2008)ShowDialogしたFormを閉じた時の、画面の挙

    (VB2008)ShowDialogしたFormを閉じた時の、画面の挙動について (VB2008EE、OSはVista) Form1からForm2を(ボタンのクリックイベントで) Dim f As New Form2 f.Show(Me) と記述して表示させたあと、 Form2の(ボタンのクリックイベントで) Me.Hide() として、Form2を閉じる記述を書きました。 で、Form2をShowDialogしてから、Hideを実行すると、 Form2が消えるのはいいのですが、残るForm1が、 ・デバッグ実行時は、VB2008EEのWindowの後ろに隠れてしまい、そのままとなる。 ・リリースビルドでは、さすがにそのままとはなりませんが、一旦Form1が  ちらつきます。 この回避策がありましたら教えてください。 。。。 ここからは、いろいろ実験した結果です。 ・試しに、Me.Hide()の後ろに、Threading.Thread.Sleep(5000)を 記述して実行すると5秒間Form1が後ろのアプリ画面に隠れた後、 Form1が前に表示される。 ・この場合の「後ろの別アプリのWindow」について、その別アプリが VB2008やエクスプローラだとForm2がそのアプリに隠れるのですが、 ExcelやIEだと、Form1が後ろに隠れることがないようです。。。 ・Hideではなく、Closeだと、後ろには隠れません。 (ただし、Closeの場合、Threading.Thread.Sleep(5000)の間はForm2は その前にClose()があっても、表示されたままSleepしその後閉じます) ・さらにShowDialog()でなく、Show()の場合、Owner指定して実行した場合は、 (つまりSHow(Me))全く問題なく、Form1が前面に表示されたまま 他のアプリが前に来ることはないのですが、 Ownerを指定せずにShowしたところ、ShowDialogと同様のことが起きるようです。 もし、これらの現象全体についてしっかりと説明できる方がいらっしゃれば、 説明もしていただけるとうれしいです。

  • (VB2008EEです)Form1からForm2をモーダレスで表示(S

    (VB2008EEです)Form1からForm2をモーダレスで表示(Show(Me))したのち、 Form2を、(Form2の)閉じるボタン(右上にあるXボタン)で閉じるときに、 単にHideするだけの処理に変更することは可能でしょうか。 デフォルトでは、閉じるボタンですと、Close()と同様、 Close(&Dispose)となると思いますが、Hide()処理に 変えられるかということです。 。。。 試しに、FormClosingイベントハンドラでHide()→e.cancel=Trueって やってみたところ、(再度同じForm2のインスタンスを使ってShowができ、 さらに前回のText表示などが残っているなど)その場はうまく行ったように 見えたのですが、そうすると、アプリ(Form1)が閉じるボタンで終了しなくなって しまいました。 (Application.Exitでもダメ、Endでは(強制終了とのことなので)OKですが) Form2のClose処理をCancelしているからだ、とは思いますが。 ShowDialog→Xボタン(同じ記述のまま) の後では、終了可能です。 では、Show→Xボタンのあとで、同じインスタンスで、上記と同じように、 ShowDialog→Xボタンとしたあと、Form1のXボタンでアプリを 終了させようとするとどうなるか。 結果は、終了不能でした。 一度Show→Xしたらそれをどこかに覚えている?ってことなのでしょうか。。。 ここらへんの現象まで、合わせて説明できる方がいらっしゃったら 合わせてご説明いただけませんでしょうか。 。。。 なお、なぜこんなことするの?という実際論はここではなしで 純粋に技術論でお願いいたします。

  • VB .NETに関する書籍について

    現在までVB6でプログラミングをしていましたが、VB.NETに乗り換えてから、まったく使えなくなってしまいました。 Form1をクリックしたらForm2を表示するようにしたくて単純に Form2.show とやってみたところ、 「非共有メンバを参照するには、オブジェクト参照が必要です。」と言われますが、はたして何のことやら??と戸惑っています。 VB6では、コントロール操作やファイルの書込み、条件判断、エラー処理などといったプログラムの基本はわかっていますので、そのまま応用できると思うので、こんな私が参照すべき書籍があれば教えていただきたいと思います。

  • VBでの質問です

    VBでの質問です Form1と2があるとします Form1とあるボタンを押すとForm2が開きFormが閉じるようにしたいのですがうまくいきません。どうしてでしょうか? Form1のコードで Form2.show Me.Close() と記述しましたがどこが違うのでしょうか。

  • モーダルでフォームを開いた場合

    親画面から .ShowDialog イベントで子画面を開きます。 通常ならば、子画面の『×』をクリックする事で親画面に戻るわけなんですが、今回プロバディで『×』をなくしています。この場合、ボタンで『閉じる』処理を作るんですが、モードレスと同じように Me.Close() で構わないのでしょうか? 心配なのはメモリ領域をきちんと開放しているかどうかなんです。どなたかご存知の方、よろしくお願いします。

  • VB2010の、Formを開く動作に関する質問です

    VB2010のFormについてお聞きしたいことがあります。 例えばForm1とForm2の2つがあるとして、 ・Form1上のボタンをクリック後Form2が表示される ・Form2を表示後Form1は自動で閉じられる。 この様な事をするにはどの様に行えばよろしいでしょうか? 試しに、 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click   Form2.Show()   Me.Close() End Sub と、してみたのですが Form2が表示された直後に1と2両方消えてしまいました。 改善方法を教えていただけると嬉しいです。 よろしくお願いいたします。

  • フォームのZOrder?

    VB2008でWindwosフォームからボタンを押して、 別のWindowsフォームを開き、そのフォームをクリックすると閉じて、元のフォームに行くプログラムで、 別のフォームを開いた後に、何か別のアプリを全面に持ってきて、同じようにフォームをクリックして、元のフォームが全面にでるかと思えば、別のアプリの下に隠れていました。 Form1.show() ボタンClickイベント     Form2.show() 別のアプリを前に Form2 フォームClickイベント Form1.Show()   <----- 読んでいるのに Me.close() <----- ここがいけない? From1が全面に来ず、別のアプリが上になる。 何か方法がまずいのでしょうか?

  • VBの各種フォーム表示について

    ご質問です。フォームに関してですが、各種フォーム表示について 疑問があります。 まずFrom2には Dim frm2 As New Form2 frm2.Show() 等で表示する事が可能ですが、 "Explorer1.vb","LoginForm1.vb","AboutBox1.vb","TextFile1.txt" "Dialog1.vb"等の表示はどの様なコードですか? googleで検索しているものの、1ヶ月経ち全然見つかりません。 是非お教え下さい。 (VB2008使用)

  • WindowsFormの消去について(C#)

    こんにちわ。 C#(WindowsForm)で以下のような処理を考えています。 1.起動するとForm1(ログイン画面)が開く 2-1.認証に成功 → 3へ 2-2.認証に失敗 → メッセージを表示し、ログイン画面のユーザ名にフォーカスをセット 3.Form3(メインメニュー)を開く そこで、スタートアップの画面は、Form1で良いと思うのですが、 2-1の場合に、以下のようなコードを書いてみました。 *************************************** Form3 f = new Form3(); f.ShowDialog(this); f.Dispose(); this.Close(); *************************************** これでは、次の部分で目的を達成できませんでした。 A.Form3をShowDaialog(this)で開くと、モーダルモードで開くだけとなってしまう。 Showではモードレスとなるだけ。 B.Dispose、Closeを記述してみたが、Form3が開いた時に、 画面上からForm1が消えるわけではない。 Closeでは、システム自体が終了してしまう。 そこで、ShowDialogやShowではなく、Form1を消し、Form3を表示するメソッド等あるのでしょうか? ちなみに、Form3をCloseした場合に、Form1を再度呼び出す処理は考えていません。

  • VB.NETについての質問なんですが

    SubMainで「Form1」をshowで開き、その「Form1」の中で「Form2」をshowで開いた後、「Form1」だけをCloseで閉じたいのですが、「Form1」をで閉じてしまうとプログラムが終了してしまいます。 Public Class Form1 : :   Private Sub Button1_Click……   Dim frmForm2 as New Form2   frmForm2.Show   Me.Close Sub End End Class 良い方法があればアドバイスをお願いします

このQ&Aのポイント
  • TS6330を使っていますが、修理中のため手元にないので会社のモバイルPCから印刷しようとしても管理者のアカウントでログインせよと言われる問題に直面しています。どうすれば解決できるでしょうか。
  • TS6330を使っていますが、自分のPCからは印刷できるのに、会社のモバイルPCから印刷しようとすると管理者のアカウントでログインせよと言われてできません。どうすれば解決できるでしょうか。
  • 会社のPCからTS6330をWiFi経由で印刷しようとすると、管理者のアカウントでログインせよと言われてできません。どうすれば解決できるでしょうか。
回答を見る