이 답변은 내 의견에서 명백하게 드러난 것처럼 실제 문제라고 생각하는 주소에 답변합니다. 현재 질문에 나타나는 세부 정보 만 포함하도록 질문을 편집해야합니다.
양식을 만들 때마다 프로 시저를 실행하려고하는 것처럼 보입니다. 위에서 설명한대로 주 스레드에서 기다리지 않아도됩니다. 대기중인 것은 메인 스레드에서도 실행됩니다. 너는 영원히 막을거야.
그래서 나는 결코 기다릴 수없는 방법을 설명하려고하지 않겠습니다. 그것은 실제 문제에 대한 해결책이 아닙니다.
귀하의 문제를 이해하고 귀하의 최근 질문에 따라 해당 양식의 생성자에서 Application.MainForm
에 액세스하려하고 MainForm
속성이 아직 초기화되지 않았습니다. 그 이유는 Application
이 소유 한 모든 구성 요소를 살펴보고 싶어하기 때문입니다.
또는 양식을 만드는 동안 nil
인 글로벌 Form1
변수를 사용하려고합니다. 그러나 어쨌든 해당 글로벌 Form1
변수를 삭제하는 것이 좋습니다. 전역 변수는 문제를 일으키는 경향이 있습니다. 양식의 메서드 내부에 있으므로 OnCreate
의 메서드 처리기에서 Self
을 사용하여 양식에 액세스 할 수 있습니다. 가능하면 Self
을 사용하십시오.
하지만 어쨌든 문제를 해결하는 것은 잘못된 방법입니다. 그것은 프로그램이 시작된 후에 생성 된 양식의 존재를 부인합니다. 양식 작성시 필요한 경우 수행해야하는 작업을 수행해야합니다.
- 는, 예를 들어,
TMyBaseForm
라고 TForm
에서 파생 된 새로운 형태를, 선언 : 이
내가 문제를 해결할 방법이다.
override
지시문을 사용하여 AfterConstruction
절차를 추가하십시오.
TMyBaseForm.AfterConstruction
을 구현하여 텍스트 변경 코드를 호출하십시오. 이 시점에서 모든 디자인 타임 컨트롤이 존재하며 속성이 스트리밍됩니다.
- 응용 프로그램의 모든 양식이
TMyBaseForm
에서 파생되었는지 확인하십시오.
이 디자인은 프로그램의 모든 GUI 요소에서 일관된 동작을 적용 할 수있는 기회를 제공합니다.
최종 의견 1 개. 당신은 상대적으로 미숙하고 초보자 인 것처럼 보입니다. 괜찮습니다. 우리는 한 번 모두 거기있었습니다.그러나 제안 된 해결책에 대해서가 아닌 문제에 대해 질문하는 것이 더 성공적 일 것입니다.
실제로 무엇을하려고합니까? 기다리는 것이 해결책이 아니라고 확신합니다. 모든 코드가 동일한 스레드에서 실행된다는 것을 이해해야합니다 (필자는 생각합니다). 그리고 당신은 자신을 기다릴 수 없습니다. –
인스턴스가 아닌 클래스에 액세스하려는 것 같습니다. 클래스는 TForm1, 인스턴스 변수는 Form1이라고합니다. 클래스에 배정 된 멤버는 사용할 수 없습니까? – whosrdaddy
'Assigned (Form1) do Sleep (100) do '도 도움이되지 않습니다. 그것은 결코 끝나지 않는 고리입니다. 나는 당신이 진짜 문제를 설명 할 것을 촉구한다. –