저는 Delphi 7을 사용하고 있습니다. FormCreate에서 객체를 만들려고하면 실제로 실패합니다. FormShow에서 동일한 작업을 시도하면 작동합니다. TEdit과 같은 시각적 구성 요소를 만드는 것에 대해 말하는 것이 아닙니다. 그것은 데이터베이스 추상화 객체입니다. 왜 이런 일이 일어날 지 생각해? 이 주제에 대한 지침이 있습니까?FormCreate에서 실패한 항목이 있지만 FormShow에서 제대로 작동하는 이유는 무엇입니까?
답변
1) 이유는 FormCreate에서 Form에 대한 핸들이 아직 만들어지지 않았기 때문입니다. 데이터베이스 객체는 폼 핸들을 필요로하는 경우
, 이렇게 :
Self.HandleNeeded을; // FormCreate 시간에.
2) 다른 이유는 데이터베이스 구성 요소를 연결해야하며 DFM에만 연결되어 있기 때문일 수 있습니다.
'TWinControl.GetHandle' (폼의 핸들을 가져올 때 호출되는 것)은 핸들을 반환하기 전에 내부적으로'HandleNeeded'를 호출합니다. 또한 연결 구성 요소에 DFM에 저장된 'Connected = True'가있는 경우 컴파일 된 응용 프로그램은 구성 요소를 인스턴스화 할 때 속성이 스트리밍되는 즉시 연결해야합니다. 컴파일 된 상태가 빌드 된 실행 파일에서'Connected = False'가되도록 강제하는 IDE 전문가가 있다면 이것이 유일한 경우입니다. – afrazier
이 질문을 한 사람은 그가 사용한 데이터베이스 개체를 언급하지 않았습니다. 나는 TDataSet이 아닌 기반이며이 문제가있는 Windows 용 BTrieve 사용을 기억합니다. – buttercup
# 2가 아니지만 1 번 소리가 들립니다. 그게 제가 찾고 있던 대답입니다. 이 객체는 너무 크고 복잡한 것이므로 FormShow에서 호출하면 제대로 작동한다는 것을 알 수 있습니다. 고마워, 나는이 대답을 받아들이고 모든 기여자를 upvoting. – Sam
내 첫 번째 추측은 당신이 아직 DataModule에 접근하고 있지 않다는 것입니다. 프로젝트의 소스는 다음과 같은 경우
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TDataModule1, DataModule1);
Application.Run;
end.
그리고 당신의 TForm1.FormCreate
처럼 보이는 다음
begin
DataModule1.AddUsersToStringList(Self.ComboBox1.Items);
end;
다음 FormCreate
이는 Application.CreateForm(TForm1, Form1);
라인의 일부로 실행되고 있기 때문에 실패 할 것, 그리고 데이터 모듈이 아직 작성되지 않았습니다.
이 개 솔루션있다 :
- 연기하여 처리/초기화 모든 양식 및 데이터 모듈이 생성 된 후까지.
- 양식을 만들기 전에 모든 데이터 모듈을 만듭니다. Delphi에서 응용 프로그램의 "주 양식"은 첫 번째 개체가 아닌
Application.CreateForm
에 의해 생성 된 첫 번째TCustomForm
자손입니다.
- 1. 같은 CSS를 사용하는 두 메뉴 항목이 다르게 작동하는 이유는 무엇입니까?
- 2. 테스트가 작동하는 이유는 무엇입니까?
- 3. Magento의 번역이 실패한 이유는 무엇입니까?
- 4. . NET에서 제대로 작동하는 ORM
- 5. GUI가 제대로 작동하는 문제
- 6. scons가 제대로 작동하는 방법
- 7. 레일즈 기능 테스트에서 포스트가 실패한 이유는 무엇입니까?
- 8. /MANIFESTUAC : NO가 작동하는 이유는 무엇입니까?
- 9. ViewHolder 패턴이 작동하는 이유는 무엇입니까?
- 10. 자바에서 + 문자열이 작동하는 이유는 무엇입니까?
- 11. 이미지가 다운로드로 작동하는 이유는 무엇입니까?
- 12. 이 diff에서 GNU 패치가 실패한 이유는 무엇입니까?
- 13. 메뉴 항목이 제대로 표시되지 않습니다.
- 14. Pixastic이 제대로 작동하지 않는 이유는 무엇입니까?
- 15. 얻기 체크 박스가 작동하는 제대로
- 16. 이미지 목록보기에서 제대로 작동하는 Viewnot
- 17. ClickOnce URLDownloadToCacheFile이 설치 중에 실패한 이유는 무엇입니까?
- 18. Grails Quartz 플러그인이 실패한 이유는 무엇입니까?
- 19. 제대로 작동하는 방법 _around_ 자바 스크립트 지속성?
- 20. index.php가 일부 시간에만 작동하는 이유는 무엇입니까?
- 21. Winforms.Button.Text가 ImageBind가 아닌 DataBinding에서 작동하는 이유는 무엇입니까?
- 22. 데이터 판독기 거기에 항목이 있지만 null을 반환합니다.
- 23. Ehcache - 항목이 너무 큰 이유는 무엇입니까?
- 24. SQL 항목이 대문자로 쓰여있는 이유는 무엇입니까?
- 25. SQL 데이터베이스에 여러 항목이 나타나는 이유는 무엇입니까?
- 26. Windows의 wxPython에서 MenuBar 항목이 지연되는 이유는 무엇입니까?
- 27. IE9에서는 작동하지 않지만 Firefox에서는 작동하는 이유는 무엇입니까?
- 28. PHP의 ++ 연산자가 객체 속성에서 작동하는 이유는 무엇입니까?
- 29. 이 경우 이벤트가 다르게 작동하는 이유는 무엇입니까?
- 30. CSS에서 작동하는 꼬리말을 만들 수없는 이유는 무엇입니까?
자세한 내용은 도움이 될 것입니다. 어떤 종류의 물건입니까? 그것은 우리가 친숙하게 생각할 수있는 표준입니다. 생성자에서 무엇을하려고합니까? 어떤 시점에서 정지합니까? 디버거가 지금까지 문제에 관해 무엇을 말했습니까? –
GExperts Debuger 또는 SmartInspect와 같은 콘솔에 출력하는 것과 같은 디버그 명령문은 어떤 행이 걸려 있는지 정확히 지적 할 수 있습니다. 그렇다면 대답은 대개 명백합니다. –
@Mason Wheeler : 우리가 제작 한 사용자 지정 데이터 추상화 개체입니다. 아니, 나는 누구도 그것에 익숙하지 않을 것이라고 기대하지 않는다. 그것은 db를 쿼리하고 쿼리 결과의 값으로 해당 속성을 채 웁니다. 생성자 내부에서 CDS를 열려고하면 중단됩니다. 디버거에 신경 쓰지 마세요. FormCreate가 아닌 FormShow에서 작동하는 이유를 알고 싶습니다. 기본 데이터 모듈, 쿼리 및 관련 클라이언트 데이터 집합이 이미 존재한다고 가정 할 수 있습니다. 그렇지 않으면 액세스 위반이 발생합니다. – Sam