DOBON.NETプログラミング掲示板過去ログ
フォームを一度閉じたら開けない?!
題名: フォームを一度閉じたら開けない?!
著者: Takkapoo
日時: 2003/09/04 18:30:50
ID: 575
この記事の返信元:
(なし)
この記事への返信:
[576]
Re[1]: フォームを一度閉じたら開けない?!
よねKEN
2003/09/04 19:17:52
ツリーを表示
分類:[.NET]
VB.NET(Windowsフォーム)で作っています。初心者です。
二つのフォームを用意し、
Form1のボタンでForm2を開きます。
Form2は一画面しか開けないようにするため、
Form2のインスタンス生成はイベントの外で行っています。
Form1のボタンの処理を下に示します。
Public frm As New Form2()
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
frm.Show()
End Sub
Form2を開いたら、右上のXボタンでForm2を閉じ、
再度Form1のボタンでForm2を開こうとすると、下記エラーが発生します。
「'System.ObjectDisposedException' のハンドルされていない例外が
system.windows.forms.dll で発生しました。
追加情報 : "Form2" という名前の、破棄されたオブジェクトにアクセスでき
ません。」
ShowDialogやHideを使わずに、
同じ画面を何個も開くことを回避する方法は無いでしょうか?
題名: Re[1]: フォームを一度閉じたら開けない?!
著者: よねKEN
URL:
http://www5b.biglobe.ne.jp/~yone-ken/
日時: 2003/09/04 19:17:52
ID: 576
この記事の返信元:
[575]
フォームを一度閉じたら開けない?!
Takkapoo
2003/09/04 18:30:50
この記事への返信:
[582]
Re[2]: フォームを一度閉じたら開けない?!
Takkapoo
2003/09/05 13:17:48
ツリーを表示
> Form2は一画面しか開けないようにするため、
> Form2のインスタンス生成はイベントの外で行っています。
提示のコードだといくつでもForm2を開けてますよ。
厳密に制御したいわけでなければ現行の方法でも構いませんが、
厳密に一つだけに制御したいなら、デザインパターンのSingletonが使えると思います。
> Public frm As New Form2()
下記のようにプロパティにしてしまい、
IsDisposedプロパティを見て、破棄済みだったらインスタンスを
再作成するようにすればOKかと思います。
(下記コードでは提示コードのfrmに代わるのがForm2プロパティ)
Private f2 As Form2
Public Property Form2() As Form2
Get
If f2 Is Nothing OrElse f2.IsDisposed Then
f2 = New Form2
End If
Return f2
End Get
Set(ByVal Value As Form2)
f2 = Value
End Set
End Property
題名: Re[2]: フォームを一度閉じたら開けない?!
著者: Takkapoo
日時: 2003/09/05 13:17:48
ID: 582
この記事の返信元:
[576]
Re[1]: フォームを一度閉じたら開けない?!
よねKEN
2003/09/04 19:17:52
この記事への返信:
(なし)
ツリーを表示
よねKENさん、早速のお返事ありがとうございます。
よねKENさんのおっしゃる通りにプログラムを修正したところ、
うまく行きました。
実際にそういうケースって、よくあると思うんですけど、
みなさん、If文で破棄されたかどうか判断して
インスタンスを生成する方法を使ってるんでしょうか?
VBだと、ただShowって書けば何度でも開閉できますけど、
VB.NETだと、ソースもそんなにすっきりと書けないものなんですね。
DOBON.NET
|
プログラミング道
|
プログラミング掲示板
VB.NET(Windowsフォーム)で作っています。初心者です。
二つのフォームを用意し、
Form1のボタンでForm2を開きます。
Form2は一画面しか開けないようにするため、
Form2のインスタンス生成はイベントの外で行っています。
Form1のボタンの処理を下に示します。
Public frm As New Form2()
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
frm.Show()
End Sub
Form2を開いたら、右上のXボタンでForm2を閉じ、
再度Form1のボタンでForm2を開こうとすると、下記エラーが発生します。
「'System.ObjectDisposedException' のハンドルされていない例外が
system.windows.forms.dll で発生しました。
追加情報 : "Form2" という名前の、破棄されたオブジェクトにアクセスでき
ません。」
ShowDialogやHideを使わずに、
同じ画面を何個も開くことを回避する方法は無いでしょうか?