- PR -

操作中のFORMから既に開かれている別FORMの操作(Shared)

1
投稿者投稿内容
オベ
会議室デビュー日: 2004/10/29
投稿数: 11
投稿日時: 2004-12-27 17:30
【環境】
Windows 2000 Professional
VB.NET
SQL SERVER2000

VB.NET歴がまだ浅いのでよろしくお願いします。
現在操作中の画面(フォーム)から既に開かれている他のフォームを操作するために以下のようにしてみましたが、なかなかうまくいきません。何かいい方法はないでしょうか?よろしくお願いします。

'画面制御共通クラスを作成する
Public Class SET_FORM

Public Shared form1 As New FORM_1 '// 画面1

end class

'メイン画面から画面1を開く
Dim setForm as new SET_FORM
setForm.form1.show()

'別の画面2のボタンから開かれている画面1を閉じる
Dim setForm as new SET_FORM
setForm.form1.close()

*画面2から画面1を無事に閉じることはできたのですが、また同じ方法でメイン画面から画面1を開こうとすると「破棄されたオブジェクトが見つかりません」と怒られたり、「"CheckBox" という名前の、破棄されたオブジェクトにアクセスできません。」など、その都度エラー内容が違います。どう対処したらよろしいでしょうか?また、Sharedを使わないで他画面を操作する良い方法がありますでしょうか?よろしくお願いします。
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2004-12-27 18:01
closeメソッドを使うとFormオブジェクトは破棄されます。
同じオブジェクトを使った再表示をしたいなら、破棄されない手段を講じる
必要があります。
簡単なのはcloseのかわりにhideメソッドを使うことです。

http://www.microsoft.com/japan/msdn/library/ja/cpref/html/frlrfSystemWindowsFormsFormClassCloseTopic.asp

_________________
たつごろー
codeseek
こみゅぷらす
オベ
会議室デビュー日: 2004/10/29
投稿数: 11
投稿日時: 2004-12-27 18:30
教えていただいた参照URLみて納得いたしました。hideメソッドでなんとか対処できるか検討したみたいと思います。他画面操作は、ただ閉じる作業だけなく、値渡しもあるのでhideでうまく制御できるか試してみます。たつごろーさん、有難うございました。
Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2004-12-27 20:51
Closingイベントで
e.Cancel = True
this.Hide()
でどうですか?
オベ
会議室デビュー日: 2004/10/29
投稿数: 11
投稿日時: 2004-12-28 18:43

Kazukiさん、返信遅れまして申し訳ないです。
以下のように閉じたい画面でcloseイベントに設定すると、変数「e」にCancelのプロパティがない、とコンパイルエラーがでます。eはSystem.object型だと思うのですが、また違った意味でeと書かれたのでしょうか?

Private Sub G_FORM_CLOSE(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Closed

e.Cancel = True
Me.Hide()

end sub
----------------------------------------------


Closingイベントで
e.Cancel = True
this.Hide()
でどうですか?
オベ
会議室デビュー日: 2004/10/29
投稿数: 11
投稿日時: 2004-12-28 19:05
↑CosingイベントのことをCloseイベントと勘違いしていました。申し訳ないです。Closingイベントで挑戦してみます。
1

スキルアップ/キャリアアップ(JOB@IT)