子画面の表示方法
- 題名: 子画面の表示方法
- 著者: ぱんだこぱんだ
- 日時: 2011/08/09 13:51:50
- ID: 28864
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: 子画面の表示方法
- 著者: shu
- 日時: 2011/08/09 14:49:50
- ID: 28865
- この記事の返信元:
-
[28864] 子画面の表示方法 ぱんだこぱんだ 2011/08/09 13:51:50
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: 子画面の表示方法
- 著者: ぱんだこぱんだ
- 日時: 2011/08/10 12:12:41
- ID: 28869
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
画面1にボタンを用意して別の子画面を表示するプログラムで
ボタンを押してForm2を表示した場合に、1回目は正常に画面を開くことができるのですが
2回目からは例外が発生します。
例外内容:{"破棄されたオブジェクトにアクセスできません。\r\nオブジェクト名 'Form2' です。"}
Form2を毎回newしてから画面をShowすれば、正常に動作しました。
Form3の場合はインスタンスを毎回画面終了時にクリアすれば、正常に動作しました。
ここで質問ですが、始めに1回だけnewしたりインスタンスを設定しただけで動作するには
どのようにしたら良いか教えてください。よろしくお願いします。
**************************************************
<画面1>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace WindowsApplication3
{
public partial class Form1 : Form
{
private Form2 form2;
public Form1()
{
InitializeComponent();
form2 = new Form2();
}
private void button3_Click(object sender, EventArgs e)
{
try
{
// form2 = new Form2();
form2.Show();
}
catch (Exception ex)
{
}
}
private void button4_Click(object sender, EventArgs e)
{
try
{
Form3 form3 = Form3.GetInstance();
form3.Show();
}
catch (Exception ex)
{
}
}
}
}
**************************************************
<画面2>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication3
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Close();
}
}
}
**************************************************
<画面3>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication3
{
public partial class Form3 : Form
{
private static Form3 InstanceForm3 = new Form3();
public Form3()
{
InitializeComponent();
}
// インスタンス取得処理
public static Form3 GetInstance()
{
if (InstanceForm3 == null)
{
InstanceForm3 = new Form3();
}
return InstanceForm3;
}
// 画面が破棄される時に呼び出される処理
protected override void OnClosed(EventArgs e)
{
// インスタンスをクリアする。
InstanceForm3 = null;
base.OnClosed(e);
}
private void button1_Click(object sender, EventArgs e)
{
Close();
}
}
}