none
Forms2からForms1をCloseするには? RRS feed

  • 質問

  • お世話になっています。

    Windows Forms1のOKボタンでForms2を表示させて、そのままForms1をClose()する方法がわかりません。
    Forms2 form = new Forms2 として、このForms2にForms1を特定する値を与えて、Forms1を閉じればよいのかと思うのですが、その方法を考えても思い浮かびません。

    どうしたらよいのでしょうか?アドバイスをお願い致します。

    2012年9月20日 15:07

すべての返信

  • Forms2 form = new Forms2 として、このForms2にForms1を特定する値を与えて、Forms1を閉じればよいのかと思うのですが、その方法を考えても思い浮かびません。

    コンストラクタで渡す、プロパティで渡す、メソッドで渡すなど、いろいろとありますし、イベントで通知するという手もあるでしょう。
    お使いの言語でオブジェクト間のやりとりをする方法を学んでください。

    ただ、閉じられたとしても、工夫しないとアプリケーションが終了してしまうと思いますよ

    • 回答の候補に設定 佐伯玲 2012年9月25日 2:07
    2012年9月20日 22:17
    モデレータ
  • グローバルオブジェクトに開いているフォームとフォームを開くメソッドの管理を任せて、各フォームから呼び出す方法があります。VBで書いてしまいましたが下記のようなコードで実現できます。適宜お使いの言語に直してください。

    Module Module1
        Dim ActiveForm As Form
    
        Public Sub OpenForm(Of TForm As {Form, New})()
            If ActiveForm IsNot Nothing Then ActiveForm.Close()
            ActiveForm = New TForm
            ActiveForm.Show()
        End Sub
    
        Public Sub Main()
            OpenForm(Of Form1)()
            Application.Run()
        End Sub
    End Module
    
    下記URLも参考になります。

    フォームを表示させずにトレイアイコンを表示する


    http://systemartlaboratory.com/

    • 回答の候補に設定 佐伯玲 2012年9月25日 2:07
    2012年9月23日 12:44
  • 通常はForm1とかForm2のように名前を付けると思うのですが、それは置いておいて。
    Forms1をCloseしたらアプリケーションが終わってしまうという記述は見当たらないので、単純にForms1で、

    Forms2 form = new Forms2
    form.Show()
    Me.Close()

    ではダメなのでしょうか?
    ただ、この後にAzuleanさんが指摘されているように、Forms1が一番最初に開かれたフォームの場合、アプリケーション自体が終了してしまうという問題にぶつかるかもしれません。その場合は、三輪の牛さんが書かれている方法などがあります。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答の候補に設定 佐伯玲 2012年9月25日 2:07
    2012年9月23日 13:31
    モデレータ
  • こんにちは、Crack Tone さん
    フォーラムオペレータの佐伯 玲 です。

    その後みなさんの返信はご確認いただけたでしょうか?
    ご確認いただいた結果をぜひこちらのスレッドにご返信くださいませ。

    宜しくお願い致します。
    __________________________
    日本マイクロソフト株式会社 フォーラム オペレーター 佐伯 玲

    2012年9月27日 8:00