アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもお世話になります。
C#に関して質問です。
VisualC#2008を使っています。

今、Form1の閉じるボタンを押すと、別フォームのForm2も閉じるようにプログラムを組んでいます。
今のところ、下のようなプログラムを書いているのですが、Form1だけが閉じられるだけでForm2が閉じられません。

どうしたらいいのでしょうか? 誰か解決策を教えてください。
よろしくお願いします。

public Form form1;

private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
DialogResult result;

result = MessageBox.Show("このまま終了すると問題は保存されません。よろしいですか?", "確認", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation,
MessageBoxDefaultButton.Button2);

if (result == DialogResult.OK)
{
Form form1 = new Form();
form1.Close();
}
else if (result == DialogResult.Cancel)
{
//キャンセル時の処理内容
}
}

A 回答 (2件)

フォーム1からフォーム2のインスタンスを生成してフォームを開いているなら


そのフォーム2のインスタンス変数のClose()を呼び出せば消えると思うのですが・・・

試しに書いてみましたが、これでどうでしょう
Form2クラスと
Form1にbutton1を用意してください。

public partial class Form1 : Form
{
public Form2 form2 = new Form2();//form2の宣言と初期化
public Form1()
{
InitializeComponent();
this.button1.Click += new EventHandler(this.button1_Click);//button1のClickイベントをイベントハンドラに追加
this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);//Form1のFormClosingイベントをイベントハンドラに追加
}

void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
DialogResult result;

result = MessageBox.Show("このまま終了すると問題は保存されません。よろしいですか?", "確認", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation,
MessageBoxDefaultButton.Button2);

if (result == DialogResult.OK)
{
form2.Close();//button1を押して開いたform2を閉じる
//e.cancel = true;
//↑コメントを外すとform2は閉じるがform1(自身)は閉じない。
//form2を閉じれたかどうかの確認用
//(終了させる方法が、デバッグの中止かタスクマネージャーで終了させるしか無くなるので注意)
}
else if (result == DialogResult.Cancel)
{
e.Cancel = true;//form1(form2も)を閉じない
}
}

private void button1_Click(object sender, EventArgs e)
{
form2.Show();//form2を表示する
}
}
    • good
    • 0

>>if (result == DialogResult.OK)


>>{
>>Form form1 = new Form();
>>form1.Close();
>>}
ここで新しくform1を宣言しているからです。
ここでClose()しているのは、この新しく宣言されたform1です。(Show()されていないので何も起こらない)
ソースの一番上の行でパブリックなform1が宣言されています。
文面を読む限りでは、閉じたいフォームはこの一番上で宣言されているform1だと思います。
Form form1 = ~略
~Close();
の部分を
this.form1.Close()としてみてください。
これでform1を"閉じる"ことはできます(破棄はしていません)
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!!
自身のフォームを閉じることはできました。

しかし、フォーム1からフォーム2を閉じる方法が分かりません。
フォーム2のインスタンスを作成して閉じようとすると、ponzuinfoさんの言うとおり、何も起こらず終わってしまいます。
何か良い方法はありませんか?

お礼日時:2010/01/19 14:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A