2013-01-01 11 views
5

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

5

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

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

+0

@ravenspoint Masz rację. Niektóre kontrolki wykonują dodatkowe czyszczenie w 'Destroy()', które nie jest wykonywane przez destruktor. –

Powiązane problemy