Znalezienie tego dość trudnego do znalezienia z wyszukiwania, ale po prostu, w jaki sposób można usunąć kontrolki z panelu? Mam niektóre wxStaticText i wxTextCtrl i chcę zamienić usunąć istniejące elementy i zastąpić je nowymi? Czy mogę wykonać jakieś polecenie, czy muszę coś zrobić sam? Na zdrowieUsunąć formanty wxWidgets
Odpowiedz
Najprostszym rozwiązaniem jest ukrycie widgetu. http://docs.wxwidgets.org/trunk/classwx_window.html#a7ed103df04014cb3c59c6a3fb4d95328
Jednakże, jeśli chcesz trwale usunąć widget, a następnie zadzwonić Destroy http://docs.wxwidgets.org/trunk/classwx_window.html#a6bf0c5be864544d9ce0560087667b7fc
EDIT: jak ravenspoint wskazał, po prostu usuwając kontroli nie wystarczy. Niektóre kontrole przeprowadzają dodatkowe czyszczenie w Destroy()
.
Możesz po prostu Destroy()
kontrolować. wxWidgets automatycznie usunie je z okna nadrzędnego i zwolni jego pamięć.
wxWindow* ctrl = new wxStaticText(this);
ctrl->Destroy();
ctrl = new wxTextCtrl(this);
Jeśli nie masz wskaźnik do kontroli, można użyć FindWindowById
, FindWindowByLabel
lub FindWindowByName
do jej uzyskania:
if(wxWindow* ctrl = wxWindow::FindWindowById(ID_MYCTRL,this))
ctrl->Destroy();
Jeżeli kontrola dodano do klasyfikatorze, to musi być wymienić, gdy jest on nadal ważny:
newCtrl = new wxWindow(...);
sizer->Replace(oldCtrl,newCtrl); // both oldCtrl and newCtrl must be valid
oldCtrl->Destroy();
Layout(); // update sizer
Alternatywnie, można utworzyć wxTextCtrl od początku i uczynić go tylko do odczytu. Jednak dodatkowe modyfikacje stylu będą wymagane, aby wyglądały jak wxStaticText (na przykład kolor tła, obramowanie itp.).
- 1. Wykres RealTime za pomocą wxWidgets
- 2. Zawsze wyświetlaj formanty wideo
- 3. Jak ustawić minimalny rozmiar okna w wxWidgets?
- 4. Okno podobne do terminala dla wxWidgets?
- 5. Swift, iboutlet i niestandardowe formanty
- 6. Dynamiczne utworzone formanty wewnątrz UpdatePanel?
- 7. Programowo pokazane formanty w MPMoviePlayerController
- 8. Interakcje pomiędzy dwa formanty użytkownika
- 9. Silnie wpisane formanty w .NET
- 10. Załaduj dane Excela do aplikacji Linux/wxWidgets C++?
- 11. Alien :: instalacja wxWidgets kończy się niepowodzeniem na OSX 10
- 12. Jak obsługiwać formanty w MPMoviePlayerController za pomocą SWIFT?
- 13. jquery najlepsze formanty, które wygenerowały drzewo
- 14. Jak mogę dopasować formanty w zmienionym formularzu?
- 15. Silverlight: Znajdź wszystkie formanty typu w layoucie
- 16. Jak utworzyć niestandardowe formanty w języku C#?
- 17. Wyłącz wszystkie formanty w formie maszynopisu
- 18. Jak dynamicznie dodawać formanty do formularza ASP.NET?
- 19. Niestandardowe formanty tagów audio HTML 5?
- 20. Dynamicznie dodawaj formanty javascript Asp.net C#
- 21. Dowolne formanty kontroli WPF, które są otwarte?
- 22. Obsługa a Kliknij wszystkie formanty w formularzu
- 23. Formanty podrzędne Xamarin Forms wewnątrz przycisku
- 24. Formanty javascript wideo HTML5 - ponowne uruchamianie wideo
- 25. Programowo dodawać formanty do formularza WPF
- 26. Jak tworzyć formanty w czasie wykonywania?
- 27. Wszystkie formanty na formularzu tylko do odczytu naraz
- 28. Excel 2010 formanty ActiveX bez dłuższej pracy po aktualizacji Windows
- 29. Jak wyłączyć wszystkie formanty w formularzu za wyjątkiem przycisku?
- 30. Gdzie można znaleźć bezpłatne, niestandardowe formanty systemu Android?
Niebezpiecznie jest po prostu wywołać delete na wskaźniku. Możesz skończyć z wysyłaniem wiadomości do usuniętego okna. Lepiej jest wywołać Destroy(). – ravenspoint
@ravenspoint Masz rację. Niektóre kontrolki wykonują dodatkowe czyszczenie w 'Destroy()', które nie jest wykonywane przez destruktor. –