none
Form1からForm2を閉じるには? RRS feed

  • 質問

  • Visual C# 2008 Express Editionを3日前から始めたばかりの初心者です。

    基本的なことかと思われますが、過去ログを見ても似た質問が無かったのでスレッドを立てさせていただきます。

     

    以下のような動作をするプログラムを考えています。

     

    1. Fomr1のメニューバーから「常にForm2を表示する」をいう項目をクリックする
    2. Form2がモードレス表示で最前面に表示される
    3. もう一度「常にForm2を表示する」をクリックする
    4. Form2が閉じる

    上記の1-2は簡単に実現できたのですが、3-4をどうすれば実現できるのか、いまいちわかりません。

    1-2のコードは下記の通りです。 

    Code Snippet

    private void ShowForm2ToolStripMenuItem_Click(object sender, EventArgs e)
    {
                Resources.Form2 form2 = new Resources.Form2();
                form2.StartPosition = FormStartPosition.CenterScreen;
                form2.TopMost = true;
                form2.Show();
               ShowForm2ToolStripMenuItem.Checked = true;
    }

     

    ここにどのようなコードを加えれば、希望通りの動作が実現できるのでしょうか。

    どうかご教授ください。

    2008年2月27日 7:44

回答

  • form2をローカル変数ではなくて、Form1のメンバ変数にして、Form1のコンストラクタでForm2のコンストラクタを呼びインスタンスを生成してform2に代入してIf文で以下のプロパティ(form2.Visible)によって条件分岐dしてそれぞれShow()またはHide()すればできると思います。

     

    Control.Visible プロパティ

    http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.control.visible(VS.80).aspx

     

    追記:

    ところで

    >3.と4.

    ユーザが「常にForm2を表示する」をクリックしたのに「閉じて」しまってよろしいのですか?

    2008年2月27日 7:59

すべての返信

  • form2をローカル変数ではなくて、Form1のメンバ変数にして、Form1のコンストラクタでForm2のコンストラクタを呼びインスタンスを生成してform2に代入してIf文で以下のプロパティ(form2.Visible)によって条件分岐dしてそれぞれShow()またはHide()すればできると思います。

     

    Control.Visible プロパティ

    http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.control.visible(VS.80).aspx

     

    追記:

    ところで

    >3.と4.

    ユーザが「常にForm2を表示する」をクリックしたのに「閉じて」しまってよろしいのですか?

    2008年2月27日 7:59
  • ご回答ありがとうございます。

    思っていたとおりの動作が実現できました。

     

    >追記:

    >ところで

    >>3.と4.

    >ユーザが「常にForm2を表示する」をクリックしたのに「閉じて」しまってよろしいのですか?

     

    言葉が足りなかったですね。

    よくある「常に手前に表示」というコマンドのように、トグルでon/offを切り替えるような動作にしたかったのです。

     

     

     

    ともあれ疑問は解決しました。

    どうもありがとうございました。

    2008年2月27日 8:22