いつもお世話になります。
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件)
- 最新から表示
- 回答順に表示
No.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を表示する
}
}
No.1
- 回答日時:
>>if (result == DialogResult.OK)
>>{
>>Form form1 = new Form();
>>form1.Close();
>>}
ここで新しくform1を宣言しているからです。
ここでClose()しているのは、この新しく宣言されたform1です。(Show()されていないので何も起こらない)
ソースの一番上の行でパブリックなform1が宣言されています。
文面を読む限りでは、閉じたいフォームはこの一番上で宣言されているform1だと思います。
Form form1 = ~略
~Close();
の部分を
this.form1.Close()としてみてください。
これでform1を"閉じる"ことはできます(破棄はしていません)
ご回答ありがとうございます!!
自身のフォームを閉じることはできました。
しかし、フォーム1からフォーム2を閉じる方法が分かりません。
フォーム2のインスタンスを作成して閉じようとすると、ponzuinfoさんの言うとおり、何も起こらず終わってしまいます。
何か良い方法はありませんか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
別のフォームで記述している関数を実行するには?C#
C言語・C++・C#
-
C#で、ある条件でFormが自動で閉じるプログラム
C言語・C++・C#
-
-
4
C# 超初心者です。 this.Refresh();という文を使いたいです
C言語・C++・C#
-
5
CloseとDisposeの違い
Visual Basic(VBA)
-
6
フォームの再読み込み
Visual Basic(VBA)
-
7
C#で動的に作ったtextboxを消す。
C言語・C++・C#
-
8
C# 別なフォームへ値を渡す (初心者です)
その他(プログラミング・Web制作)
-
9
DataGridViewの内容をDBに反映する時
Visual Basic(VBA)
-
10
C# 配列の変数宣言について。
C言語・C++・C#
-
11
C#にて別クラスの関数を使いたい
C言語・C++・C#
-
12
【C#】DataGridViewの最大列数について
システム
-
13
DataGridViewに複数テーブルのデータをセットしたい
Visual Basic(VBA)
-
14
C# ログイン画面からメイン画面への画面遷移について
C言語・C++・C#
-
15
C# フォームを閉じてもプログラムが終了しない
C言語・C++・C#
-
16
「指定されたキャストは有効ではありません。」とエラーが出てしまいます。
Microsoft ASP
-
17
【C#】 あるイベントから別イベントを呼び出す。
その他(プログラミング・Web制作)
-
18
DataGridViewのチェックボックスのON、OFFの判定方法
C言語・C++・C#
-
19
インスタンス参照でアクセスできない。代わりに型名?
C言語・C++・C#
-
20
DataGridViewでセルクリックイベントを発生させるには
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#で、ある条件でFormが自動で...
-
別フォームからdatagridviewの削除
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
グラフの交点の求め方(Excel)
-
コントロールの書式設定で、“コ...
-
JTableのヘッダー文字のサイズ変更
-
フォントの大きさ
-
VB6,リストボックスの特定行の...
-
フォームでPDFを表示させた...
-
VC(Ver6.0)でダイアログサイズ...
-
エクセルである行が急に消えて...
-
msgboxの表示位置
-
コンボボックス内の文字サイズ変更
-
他のウィンドウのボタンを自動...
-
MFCダイアログボックスを最前面...
-
勝手にウィンドウが開いて止ま...
-
マインクラフト(pc版)で座標...
-
VBA TEXTBOXテキストボックスの...
-
jw-cadにBMP画像を貼り付けまし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#】別フォームも同時に閉じ...
-
C#で、ある条件でFormが自動で...
-
C# フォームを閉じてもプログラ...
-
C# FlowLayoutPanelのコントロ...
-
OutLookのメール受信通知 (C#)
-
C# 自分自身のコントロールを指...
-
別フォームからdatagridviewの削除
-
C#でテキストボックスをクリッ...
-
form2 から form1に戻ったとき...
-
ASP.NetでJavaScriptからポスト...
-
【C#】サブフォームからメイン...
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
フォントの大きさ
-
コンボボックス内の文字サイズ変更
-
コントロールの書式設定で、“コ...
-
勝手にウィンドウが開いて止ま...
-
検索の画面がでなくなってしま...
-
VBAのフォント変更(エクセルか...
-
エクセルのコントロールツール...
おすすめ情報