C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: 親フォームから子フォームを閉じたい


(過去ログ 109 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■64601 / inTopicNo.1)  親フォームから子フォームを閉じたい
  
□投稿者/ MP枯渇ウィザード (3回)-(2012/12/10(Mon) 17:01:17)

分類:[VB.NET/VB2005 以降] 

お世話になります。

Windowsフォームアプリでメインになるフォーム1にボタンを3つ配置、ボタン2でフォーム2が開き、
ボタン3でフォーム3が開くようにしています(ボタン1は子フォームが開いているときに
 親フォームのボタンも子フォームのボタンも有効であることの確認用なので、今回は
 話に触れなくて良いと思います)。


ボタン2を押したとき、フォーム3が開いていたら閉じるようにしたいのですが、上手く
行きません。

Public Class Form1


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim a
        a = MsgBox("終了?", MsgBoxStyle.YesNo)
        If a = vbYes Then
            Application.Exit()
        End If
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        If My.Application.OpenForms("Form3") IsNot Nothing Then
            Form3.Close()
            Form3.Dispose()
        End If

        '表示させるフォームのインスタンスを作成
        Dim f As New Form2()
        'TopLevelをFalseにする
        f.TopLevel = False
        'フォームのコントロールに追加する
        Me.Controls.Add(f)
        'フォームを表示する
        f.Show()
        '最前面へ移動
        f.BringToFront()


    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

        '表示させるフォームのインスタンスを作成
        Dim f As New Form3()
        'TopLevelをFalseにする
        f.TopLevel = False
        'フォームのコントロールに追加する
        Me.Controls.Add(f)
        'フォームを表示する
        f.Show()
        '最前面へ移動
        f.BringToFront()

    End Sub


End Class

Close/Disposeでは駄目なのでしょうか?

引用返信 編集キー/
■64602 / inTopicNo.2)  Re[1]: 親フォームから子フォームを閉じたい
□投稿者/ shu (126回)-(2012/12/10(Mon) 17:23:31)
No64601 (MP枯渇ウィザード さん) に返信

button3_clickの
> Dim f As New Form3()

Button2_Clickの
> Form3
が別のインスタンスだから。

button3_clickで作成したインスタンスをPrivate変数で保持して
その変数に対し処理を行うようにした方が良いかと思います。
また作成したFormのFormClosedイベントをForm1で実装しPrivate変数に対し
Nothingをセットすると処理しやすいかと思います。
引用返信 編集キー/
■64663 / inTopicNo.3)  Re[2]: 親フォームから子フォームを閉じたい
□投稿者/ MP枯渇ウィザード (4回)-(2012/12/14(Fri) 13:36:20)
No64602 (shu さん) に返信
> ■No64601 (MP枯渇ウィザード さん) に返信
>
> button3_clickの
>>Dim f As New Form3()
> と
> Button2_Clickの
>>Form3
> が別のインスタンスだから。
>
> button3_clickで作成したインスタンスをPrivate変数で保持して
> その変数に対し処理を行うようにした方が良いかと思います。
> また作成したFormのFormClosedイベントをForm1で実装しPrivate変数に対し
> Nothingをセットすると処理しやすいかと思います。


教えて頂いた方法で上手くいきました。
どうもNewを使って何かするというのが理解しにくいです・・・。
ありがとうございました。
解決済み
引用返信 編集キー/
■64664 / inTopicNo.4)  Re[3]: 親フォームから子フォームを閉じたい
□投稿者/ howling (147回)-(2012/12/14(Fri) 14:08:20)
No64663 (MP枯渇ウィザード さん) に返信

> 教えて頂いた方法で上手くいきました。
> どうもNewを使って何かするというのが理解しにくいです・・・。
> ありがとうございました。

逆に、Newを全く使わずにコーディングすることの方が難しいと思いますよ。
同じクラスのインスタンスを2つ以上作りたい場合とかどうしますか?

社員クラスの中に社員の名前を記載する場合を例に考えてみるといいかと。

staticなメソッドやクラスのみ使用するというのは可能かもしれませんが、
この例の場合だと、社員クラスを2つコーディングしないといけないのでは?
配列ならいいでしょう、と言うなら配列はNewしないのでしょうか?
ここの理解はしっかりしておいた方がいいです。
詳しく内部的に云々、というのまでは、むしろ私も理解してませんが(苦笑
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -