プログラミングに慣れていない、オブジェクトの有効期間/インスタンス化を理解するのが難しいです。オブジェクト/デザインパターンヘルプの複数インスタンスのライフタイム
私は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()も調べたが運がない。
私の質問は以下のとおりです。
- 私はパネルの一つだけ インスタンスが作成されていることを確認するにはどうすればよいですか?
- 私は 同じ名前 と同じオブジェクトの複数のインスタンスを作成する場合は、それらはすべてメモリ上に座るか、または 「コンピュータ」は唯一、最近 作成に の参照を保持していますか? ( の名前はありませんか?)
- 私のdeisgnパターン と間違ったトラックを使用し、 'パネル'クラスを使用しましたか?
おかげ