2009-09-05 2 views
0

프로그래밍에 익숙하지 않고 객체 수명/인스턴스를 이해하는 데 어려움이 있습니다.오브젝트/디자인 패턴 도움말의 복수 인스턴스 수명

나는 datagridview와 패널이있는 창을 가지고 있습니다.

datagridview에는 데이터베이스에서 채워지는 확인란 목록 열과 이름 목록이 있습니다.

패널에는 텍스트 상자 (예 : 이름, 나이, 좋아하는 스포츠 팀)와 '변경 사항 저장'버튼이 있습니다.

사용자가 적절한 확인란을 선택하여 datagridview에서 사람을 선택하면 패널에 데이터베이스에서 데이터를 가져 와서 해당 사람 (이름, 나이, fav 스포츠 팀)에 대한 관련 데이터가 표시된다는 개념입니다. 사용자가 세부 정보를 업데이트하고 싶으면 텍스트 상자에 입력 한 다음 '변경 사항 저장'버튼을 클릭하면됩니다. 지금까지 아주 간단합니다.

내가 디자인 한 방식은 '패널'클래스를 사용하고 사용자가 확인란을 선택할 때 인스턴스를 만드는 것입니다. (주의 - '패널'클래스를 만든 이유는 내 양식 내에서 다른 탭 페이지의 DataGridview 및 패널을 복제하고 재사용 할 수있는 일반 '패널'클래스를 갖는 것이 유용 할 것이라고 생각한 것입니다 .)

내 코드는 모양이 같은 비트 :

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

사용자가 SaveButton를 클릭하면 데이터가 데이터베이스에 업데이트 내가 "성공적인 업데이트"라는 표시 메시지 (단순 텍스트 상자)가있다 자체를 숨기기 전에 5 초 동안 표시됩니다.

사용자를 가정이 체크 박스를 검사 데이터를 검토하고 변경하지 않는 한 다음 다른 확인란을 확인하고 '변경 사항 저장'버튼을 클릭하여 데이터를 업데이트하기로 결정 : 여기

문제입니다. 업데이트 성공 메시지가 두 번 표시됩니다.

나는 이것이 사용자가 체크 박스를 체크 할 때마다 UpdatePanel의 인스턴스가 생성되기 때문이라고 생각한다. 체크 박스를 사용하는 5 명의 다른 사용자를 선택한 다음 '변경 사항 저장'을 누르면 5 개의 "업데이트 성공"메시지가 표시됩니다.

나는 이것을 극복하는 방법을 모르겠습니다. 체크 박스를 클릭 할 때마다 UpdatePanel의 인스턴스가 존재하는지 확인한 다음 파괴해야합니다. UpdatePanel = Nothing을 사용하여 시도했지만 IDisposable 및 GC.Collect()를 조사했지만 운이 없었습니다.

내 질문은 :

  1. 어떻게 패널의 한 인스턴스가 생성되어 있는지 확인 할 수 있습니까?
  2. 내가 같은 이름 와 같은 개체의 여러 인스턴스를 작성하는 경우는 모두 메모리에 앉아 않거나 '컴퓨터'는 가장 최근에 생성에 참조를 유지 하는가? ( 충돌이 있습니까?)
  3. 내 deisgn 패턴 과 '패널'클래스를 사용하여 잘못된 트랙을 내려 갔습니까?

감사

답변

0

DB를를 업데이트하기 전에 당신이 어떤 변화가 있었다 여부를 확인 여부되어 있는지 확인합니다. 아마 사용자가 데이터를 검토 할 때마다 단일 업데이트를 추가하는 것이 있습니다. 설명이 명확하지 않아서 더 많은 코드를 게시하면 대부분의 코드를 보지 않고 문제가 어디에 있는지 말하기가 쉽습니다.

  1. 당신이 그들을 만드는 방법에 그것은 의존 singleton 패턴

  2. 를 사용합니다. 메소드 범위에서 생성 된 객체는 삭제로 표시되고 GC가 그를 수집하기를 기다립니다. 개체를 WinForm의 변수에 저장하면 GC와 관계가 없습니다. 그래서 기본적으로 객체는 죽어 가고 있지만 더 오래 살 수 있습니다. 또한 GC 시간은 결정되지 않으며 GC가 작업을 수행하고 객체를 파괴 할 때를 알지 못합니다.

  3. s not clear what was done, so if you post the code I이 대답 할 수 있습니다.