Buduję aplikację przy użyciu Delphi 7. Dodałem jeden przycisk w głównym formularzu. W tym przycisku kliknij Chcę pokazać inny formularz. Próbuję utworzyć drugi formularz tylko wtedy, gdy użytkownik kliknął ten przycisk po raz pierwszy. Jeśli użytkownik kliknie ten przycisk po raz drugi, powinien zostać wyświetlony już utworzony formularz. Czy obiekt Form ma jakąś właściwość, dzięki której możemy bezpośrednio sprawdzić, czy obiekt został już utworzony, czy nie?Sprawdź, czy obiekt został utworzony czy nie w delphi
5
A
Odpowiedz
10
if Assigned(Form1) then
begin
//form is created
end;
Ale jeśli forma jest zadeklarowana lokalnie
globalnie
należy upewnić się, że jest on inicjowany nil
.
4
Potrzebujesz pola elementu, aby zachować odniesienie do formularza. Następnie sprawdź, czy odniesienie zostało przypisane. Tak:
function TMainForm.GetOtherForm: TMyForm;
begin
if not Assigned(FOtherForm) then
FOtherForm := TMyForm.Create(Self);
Result := FOtherForm;
end;
2
Assigned (obj) może jeszcze powrócić prawda nawet po uwolnić go, używając "Obj.free". Najlepszy sposób na osiągnięcie celu jest bezpłatny, ZA UŻYCIE Assigned (obj) używa "FreeAndNil (Obj)"
0
Czasami forma jest darmowa, ale nie jest zerowa. W takim przypadku sprawdzenie Assigned nie jest tak dobre. Jedną z opcji jest uwolnienie formularza i ustawienie MyForm: = zero w formularzu OnClose. Inną opcją jest użycie następującego proc:
function TMyForm.IsFormCreated: bool;
var i: Integer;
begin
Result := False;
for i := 0 to Screen.FormCount - 1 do
begin
if Screen.Forms[i] is TMyForm then
begin
Result := True;
Break;
end;
end;
end;
Powiązane problemy
- 1. SDL2 - Sprawdź, czy kontekst OpenGL został utworzony
- 2. Delphi: Czy wątek kiedykolwiek zostanie utworzony "nie zawieszony"?
- 3. JUnit test case, aby sprawdzić, czy plik został utworzony
- 4. Sprawdź, czy plik utworzony w ciągu ostatnich X godzin
- 5. Sprawdź, czy obraz został załadowany z pamięci podręcznej, czy nie.
- 6. Sprawdź, czy wiersz został zmieniony w TClientDataset
- 7. Sprawdź, czy obiekt implementuje interfejs
- 8. Sprawdź, czy obiekt jest pusty
- 9. Sprawdź, czy obiekt implementuje interfejs
- 10. JPA: sprawdzić, czy obiekt został jednostka utrzymywała czy nie
- 11. Sprawdź, czy model został zmodyfikowany lub utworzony w przypadku zdarzenia before_save
- 12. Sprawdź, czy wydruk został wykonany pomyślnie
- 13. Django sprawdź, czy obiekt w polu ManyToMany
- 14. Sprawdź, czy plik javascript został załadowany
- 15. Sprawdź, czy plik został włączony lub załadowane
- 16. Sprawdź, czy element został przewinięty do góry
- 17. Sprawdź, czy element został kliknięty lub zmieniony
- 18. Czy obiekt datetime.date bez dnia może zostać utworzony w pythonie?
- 19. dlaczego rdzenia angularjs trzeba wykryć, czy moduł ngLocale został utworzony?
- 20. Jak stwierdzić, czy obiekt NSManagedObject został zapisany?
- 21. Jak najlepiej sprawdzać, czy obiekt został zmieniony?
- 22. Microsoft SQL Server: Czy można określić, kiedy rekord został utworzony?
- 23. Jak określić, czy obiekt został zgubiony
- 24. Sprawdź, czy jest to obiekt okno
- 25. Delphi: Jak uwolnić obiekt utworzony dynamicznie jako parametr metody
- 26. Sprawdź, czy lista tablicowa Java zawiera obiekt
- 27. Sprawdź, czy lista wierzchołków zawiera obiekt
- 28. Sprawdź, czy obiekt jest obiektem jQuery.
- 29. jQuery: Sprawdź, czy obiekt ma klasę
- 30. sprawdź, czy std :: vector zawiera określony obiekt?
(. Ja po prostu usunąć samą odpowiedź), ale trzeba dodać, że należy zresetować zmienną z powrotem do zera po niszcząc TOtherForm, jak oddanie TOtherForm: = nil w OnDestroy firmy TOtherForm. –
@ Hasan Jeśli drugi formularz zostanie kiedykolwiek usunięty. Mam wrażenie, że ma to być forma, która żyje na zawsze, gdy tylko zostanie stworzona. –
dokładnie, ale tylko dla spokoju ducha, aby przewidzieć scenariusz, w którym formularz zostanie usunięty (wyraźnie lub z jakiegokolwiek powodu) w przyszłości - tak aby nie wprowadzał "nowych błędów". –