2009-09-05 8 views
0

プログラミングに慣れていない、オブジェクトの有効期間/インスタンス化を理解するのが難しいです。オブジェクト/デザインパターンヘルプの複数インスタンスのライフタイム

私はdatagridviewとパネルからのウィンドウを持っています。

datagridviewには、チェックボックス列と、データベースから取り込まれる名前のリストがあります。

パネルには、名前、年齢、お気に入りのスポーツチームなどのテキストボックスと「変更を保存」ボタンがあります。

考えられるのは、ユーザーが適切なチェックボックスをオンにしてdatagridviewの人物を選択すると、その人物(名前、年齢、favスポーツチーム)の関連データがパネルに表示されます。ユーザーが詳細を更新したい場合は、テキストボックスに入力して「変更を保存」ボタンをクリックしてください。今のところかなり単純です。

私がこれを設計した方法は、 'パネル'クラスを持ち、ユーザーがチェックボックスをチェックしたときにインスタンスを作成することです。 (NB - 私が 'パネル'クラスを作成した理由は、フォーム内の他のタブページにあるデータグリッドビューとパネルを複製し、再利用できる汎用のパネルクラスを持つと便利だと考えたからです。)

私のコードは、ビットのようになります。ユーザーがSaveButtonをクリックすると

If CheckBoxClicked Then 
Dim UpdatePanel As New UpdatePanel(MyForm.NameTextBox, MyForm.AgeTextBox, MyForm.FavSportTeamTextBox, MyForm.SaveButton) 
UpdatePanel.GetData() 
... 

データがデータベースに更新され、私は「成功した更新」と言う表示メッセージ(簡単なテキストボックス)を持っていますそれ自身を隠す前に5秒間表示します。ここで

は問題です:

は、ユーザが、チェックボックスをチェックし、データを検討し、変更を加えていないし、別のチェックボックスをチェックし、「保存の変更」ボタンをクリックすることでデータを更新することを決定したとします。何が起こるかは、「Update successful」メッセージが2回表示されることです。

私はこれは、ユーザーがチェックボックスをチェックするたびにUpdatePanelのインスタンスが作成されるためだと思います。チェックボックスを使用して5人の異なるユーザーを選択し、「変更を保存」をクリックすると、5つの「更新が成功しました」というメッセージが表示されます。

これを解決する方法がわかりません。チェックボックスがクリックされるたびに、UpdatePanelのインスタンスが存在するかどうかを確認してから、それを破棄する必要があります。私はUpdatePanel = Nothingを使って試してみたが、IDisposableとGC.Collect()も調べたが運がない。

私の質問は以下のとおりです。

  1. 私はパネルの一つだけ インスタンスが作成されていることを確認するにはどうすればよいですか?
  2. 私は 同じ名前 と同じオブジェクトの複数のインスタンスを作成する場合は、それらはすべてメモリ上に座るか、または 「コンピュータ」は唯一、最近 作成に の参照を保持していますか? ( の名前はありませんか?)
  3. 私のdeisgnパターン と間違ったトラックを使用し、 'パネル'クラスを使用しましたか?

おかげ

答えて

0

デシベルを更新する前に何らかの変更があったかどうかをチェックするかしていないことを確認してください。おそらく、ユーザーがデータをレビューするたびに、単一の更新を加える何かがあります。あなたの説明があまり明確ではないので、より多くのコードを投稿すれば答えが簡単になり、コードの大部分を見ることなく問題がどこにあるのかを言うのは難しいです。

  1. それはあなたがそれらの作成方法によって異なりsingletonパターン

  2. を使用してください。メソッドのスコープで作成されたオブジェクトには削除マークが付けられ、GCが彼を収集するのを待ちます。あなたのオブジェクトがWinFormの変数の中に格納されていれば、それはGCからそれらを保持します。だから、デフォルトではオブジェクトは死にかけていますが、それを長く生かせます。また、GC時間は決まっておらず、GCがその作業をしてオブジェクトを破壊する時を決して知らないことに注意してください。

  3. s not clear what was done, so if you post the code Iこれに答えることができます。

関連する問題