tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルform1からform2を開いたときに、form1を閉じたい
記事No2388
投稿日: 2005/10/11(Tue) 15:58
投稿者raly pop
[OSのVer]:Windows2000    [VBのVer]:VB.NET 
初めて投稿させていただきます、よろしくお願いいたします。 
タイトルのとおりなのですが、form1でボタンを押したら、
form2が開き、form1は閉じるようにしたいのですが、 うまくいきません。
過去ログの3form間のshow,close投稿等を見ながらやってみたりもしたのですが、
結局のところ、ボタンを押すと、form1が開いたまま、form2も開くor
form1,form2共に消えてしまう、という感じです。
ご教授お願いいたします。

[ツリー表示へ]
タイトルRe: form1からform2を開いたときに、form1を閉じたい
記事No2389
投稿日: 2005/10/11(Tue) 16:47
投稿者なおこ(・∀・)
お世話になります。

form1の中のボタン押下のメソッドで
form2のインスタンスを生成してShowした後に
Me.Hide()はどうでしょう。

[ツリー表示へ]
タイトルRe^2: form1からform2を開いたときに、form1を閉じたい
記事No2391
投稿日: 2005/10/11(Tue) 16:58
投稿者raly pop
[OSのVer]:Windows    [VBのVer]:VB.NET 

あっけなくできました〜!!
どうも、ありがとうございました。
現在、悪戦苦闘なので、またここにお世話になるかもしれませんが、
よろしくお願いします。
 
> お世話になります。
>
> form1の中のボタン押下のメソッドで
> form2のインスタンスを生成してShowした後に
> Me.Hide()はどうでしょう。

[ツリー表示へ]
タイトルRe^2: form1からform2を開いたときに、form1を閉じたい
記事No2627
投稿日: 2005/11/23(Wed) 23:50
投稿者tomo
[OSのVer]:Windows    [VBのVer]:VB.NET2005 beta

 はじめまして。
私もraly popさんと同じ内容で悩んでいます。

> form1の中のボタン押下のメソッドで
> form2のインスタンスを生成してShowした後に
> Me.Hide()はどうでしょう。

Dim f As New Form2
f.Show()
Me.Hide()

 上記の内容で試してみたのですが、Form2を閉じたときにForm1が残っているので、
うまく終了することができません。
また、Form2からForm3を表示したりもします。

Form1からForm2を表示してForm1を非表示にせずに閉じることは出来ないのでしょうか。

長文で申し訳ないですが、ご教授お願いします。

[ツリー表示へ]
タイトルRe^3: form1からform2を開いたときに、form1を閉じたい
記事No2628
投稿日: 2005/11/24(Thu) 09:49
投稿者なおこ(・∀・)
お世話になります。

>  上記の内容で試してみたのですが、Form2を閉じたときにForm1が残っているので、
> うまく終了することができません。
> また、Form2からForm3を表示したりもします。
>
> Form1からForm2を表示してForm1を非表示にせずに閉じることは出来ないのでしょうか。

色々方法はあるかと思いますが、
例えば、
こんな方法とか
hhttp://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=13820&rev=&no=0
こんな方法で、アプリケーションの中で使うFormをコレクションで管理するとか、
hhttp://support.microsoft.com/default.aspx?scid=kb;ja;JP308537
↓こんな方法とかありますが。
 (↓のコードは例外処理とかオブジェクトの破棄を保障する事とか
  一切考慮していませんのであしからず)

■Form1(スタートアップ)
Public Class Form1
  Inherits System.Windows.Forms.Form

#Region " Windows フォーム デザイナで生成されたコード "
'略
#End Region

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
  Handles Button1.Click
    Dim f2 As Form2
    f2 = New Form2(Me)
    f2.Show()
    Me.Hide()
  End Sub
End Class

■Form2
Public Class Form2
  Inherits System.Windows.Forms.Form

#Region " Windows フォーム デザイナで生成されたコード "

  Private Sub New()
    MyBase.New()

    ' この呼び出しは Windows フォーム デザイナで必要です。
    InitializeComponent()

    ' InitializeComponent() 呼び出しの後に初期化を追加します。

  End Sub
'略
#End Region

  Private m_owner As Form

  Public Sub New(ByVal owner As Form)
    Me.New()
    Me.m_owner = owner
  End Sub

  Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
  Handles Button1.Click
    Me.Close()
    Me.Dispose()
    If MessageBox.Show("アプリケーションを終了しますか", _
               "", _
               MessageBoxButtons.YesNo, _
               MessageBoxIcon.Question) = DialogResult.Yes Then
      If Not Me.m_owner Is Nothing Then
        Me.m_owner.Close()
        Me.m_owner.Dispose()
        Application.Exit()
      End If
    Else
      Me.m_owner.Show()
    End If
  End Sub
End Class

[ツリー表示へ]
タイトルRe^4: form1からform2を開いたときに、form1を閉じたい
記事No2630
投稿日: 2005/11/24(Thu) 11:20
投稿者tomo
[OSのVer]:Windows    [VBのVer]:VB2005

お世話になります。

> hhttp://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=13820&rev=&no=0
ここの掲示板で記載されているサンプルコードで試してみたのですが、
ビルドすると下記のエラーが発生します。

'Sub Main' が 'KaokuWin' で 2 回以上宣言されています:AppBase.Main(), My.MyApplication.Main
(Args() As String)    

どうすればよいのでしょうか。
宜しくご教授お願いします。

[ツリー表示へ]
タイトルRe^5: form1からform2を開いたときに、form1を閉じたい
記事No2632
投稿日: 2005/11/24(Thu) 11:58
投稿者なおこ(・∀・)
お世話になります。

> > hhttp://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=13820&rev=&no=0
> ここの掲示板で記載されているサンプルコードで試してみたのですが、
> ビルドすると下記のエラーが発生します。
>
> 'Sub Main' が 'KaokuWin' で 2 回以上宣言されています:AppBase.Main(), My.MyApplication.Main
> (Args() As String)    

エラーメッセージの通り、2 箇所で Sub Main が宣言されているので、
どちらかの Sub Main だけにしましょう。

[ツリー表示へ]
タイトルRe^6: form1からform2を...
記事No2636
投稿日: 2005/11/25(Fri) 09:38
投稿者じゃんぬねっと
参照先http://jeanne.wankuma.com/
> hhttp://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=13820&rev=&no=0

というか、ApplicationContext の方法を教えてあげた方がいいと思う。> なおこさん
ここも、あっちも。

[ツリー表示へ]
タイトルRe^7: form1からform2を...
記事No2640
投稿日: 2005/11/25(Fri) 16:54
投稿者なおこ(・∀・)
お世話になります。

> というか、ApplicationContext の方法を教えてあげた方がいいと思う。> なおこさん
> ここも、あっちも。

という事で、じゃんぬせんせいの指導に基づき、
こんな感じ?てのを書いてみました。
hhttp://naoko.wankuma.com/temp/WindowsApplication8.zip

[ツリー表示へ]
タイトルRe^8: form1からform2を...
記事No2646
投稿日: 2005/11/25(Fri) 20:09
投稿者tomo
[OSのVer]:Windows    [VBのVer]:VB2005beta

> お世話になります。
>
> > というか、ApplicationContext の方法を教えてあげた方がいいと思う。> なおこさん
> > ここも、あっちも。
>
> という事で、じゃんぬせんせいの指導に基づき、
> こんな感じ?てのを書いてみました。
> hhttp://naoko.wankuma.com/temp/WindowsApplication8.zip

 じゃんぬ先生、なおこ(・∀・) 先生回答ありがとうございます。
なおこ(・∀・) 先生に添付していただいた内容をVB2005betaで試したところ
『Dim context As MyApplicationContext = MyApplicationContext.GetInstance()』で
下記の例外エラーが発生しました。

TypeInitializationException はハンドルされませんでした。
'WindowsApplication1.MyApplicationContext' のタイプ初期化子が例外をスローしました。

VB2003とVB2005ではやり方が違うのでしょうか。
初歩的な質問で恐縮ですが、宜しくお願いします。

[ツリー表示へ]
タイトルRe^3: form1からform2を開いたときに、form1を閉じたい
記事No2647
投稿日: 2005/11/26(Sat) 01:56
投稿者tomo
[OSのVer]:Windows    [VBのVer]:VB.NET2005 beta

Application.Run() とすればApplication.ExitThread()するまでアプリケーションが終了せずに
Application.Run(New Form1) とすればForm1を閉じた時点でアプリケーションが終了するのですね。

私の作りたいプログラムは、ベースとなるフォームがコロコロ変わるので、Application.Run(New
DummyForm)としてDummyFormを非表示として起動しておき、プログラムを終了したいときにDummyFormを
Close()してあげればいけると思います。

なおこ(・∀・)先生、じゃんぬねっと先生ご教授ありがとうございました。

[ツリー表示へ]
タイトルRe^4: form1からform2を開いたときに、form1を閉じたい
記事No2651
投稿日: 2005/11/26(Sat) 14:20
投稿者なおこ(・∀・)
お世話になります。

> 私の作りたいプログラムは、ベースとなるフォームがコロコロ変わるので、Application.Run(New
> DummyForm)としてDummyFormを非表示として起動しておき、プログラムを終了したいときにDummyForm

> Close()してあげればいけると思います。

ん?であればますます ApplicationContext を使った方がよさそうな感じが...。
hhttp://www.microsoft.com/japan/msdn/library/default.asp?
url=/japan/msdn/library/ja/cpref/html/frlrfsystemwindowsformsapplicationcontextclasstopic.asp

VS2005 の環境がちょっと今手元にないんで、
TypeInitializationException について再現できないです。申し訳ないです。
おそらく、MyApplicationContext の New の中で何かおきてるようですね。

[ツリー表示へ]