|
최주영 님이 쓰신 글 :
:
: 안녕하세요
:
: MDI child 폼이 현재 MDIFORM 에 보여지고 있습니다.
:
: 보여지는 Child 에서는 listview1 과 버튼1이 놓여져 있는데요
: 버튼 1을 눌렀을때 동적으로 생성된 모달폼이 생성됩니다....
:
: 그 생성된 모달폼에서 MDI child 폼에 놓여진 ListView1->Items->Clear(); 함수를
: 사용하려는데 메모리 Access 에러가 발생합니다...
:
: 차일드 폼의 ListView 컨트롤의 속성들을 모달폼에서 사용하는 방법좀 알려주세요
:
임펠리테리입니다.
아마도, 모달폼에서 차일드폼을 지정하는 데서 유효하지 않은 포인터를 사용하셨을 겁니다. 무슨 말이냐 하면...
MDI차일드 폼의 경우 항상 동적으로 생성되기 때문에, 빌더에서 New Form을 선택해서 만들어진 새 폼의 포인터는 항상 실제 폼이 생성되지 않습니다. 이 "가짜" 폼 포인터를 억세스했다면, 여기에는 폼 객체가 할당되어 있지 않기 때문에 억세스바이얼레이션이 생기는 것이 당연합니다.
문제를 해결하려면, 당연히, 실제로 폼 객체가 만들어진 포인터를 억세스해야 합니다. 예를 들어, 현재 액티브한 MDI 차일드폼의 리스트뷰를 참조하려면, 메인폼의 ActiveMDIChild 프로퍼티에 항상 액티브한 차일드폼의 객체가 유지되므로 이걸 억세스하면 됩니다. 한가지 주의할 점은, 이 경우, ActiveMDIChild 프로퍼티는 TForm 형이므로 멤버중에 리스트뷰가 없습니다. 그러므로 차일드 폼 형으로 캐스팅을 해준 후 리스트뷰 멤버를 억세스해야 합니다.
그럼 참고하시길...
|