Page 1 of 1

Динамическое удаление контролов

Posted: Thu Dec 31, 2009 3:22 pm
by monax
Нужно удалить контролы, которые добавляются динамически.

Code: Select all

void CreateDynamicBlock()
{

	wxStaticBox* box = new wxStaticBox(scrollWindow, wxID_ANY, _("Caption text"));

	wxStaticBoxSizer* boxSizer = new wxStaticBoxSizer(box, wxHORIZONTAL);

	scrollWindow->GetSizer()->Add(boxSizer, 0, wxGROW|wxALL, 4); // получить лайаут окна

	wxStaticText* text = new wxStaticText(scrollWindow, wxID_STATIC, _("Text"));

	boxSizer->Add(text, 1, wxALIGN_CENTER_VERTICAL|wxALL, 0);



	wxBitmapButton* doneButton = new wxBitmapButton(scrollWindow, wxID_ANY, getBitmapResource(wxT("donebutton")));

	doneButton->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( TODOFrame::OnDoneButtonClick), NULL, this );

	boxSizer->Add(doneButton, 0, wxALIGN_CENTER_VERTICAL|wxALL, 1);



	scrollWindow->FitInside();
}


void OnDoneButtonClick(wxCommandEvent& event)
{
	// тут нужно удалить созданные в контролы:
	// box, boxSizer, text, doneButton
}
Удалить контролы, для которых родителем является scrollWindow, получается нормально, а вот удалить сайзер boxSizer не получается. И в итоге приложение ложится.

Posted: Mon Jan 04, 2010 11:11 am
by van_user
Sizer :: Detach используешь? Код удаления контроллов где?

Posted: Fri Jan 08, 2010 8:09 pm
by monax
van_user wrote:Sizer :: Detach используешь?
Нет не использую. У меня вопрос, а можно просто удалить контейнер?

Code: Select all

wxPanel* pane = new wxPanel(frame, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNO_BORDER|wxTAB_TRAVERSAL|wxALL);

wxBoxSizer* boxSizer = new wxBoxSizer(wxVERTICAL);

pane->SetSizer(boxSizer);

wxBitmapButton* button = wxBitmapButton(pane, wxID_ANY, frame->getBitmapResource(wxT("donebutton")), wxDefaultPosition, wxSize(48, 30));

boxSizer->Add(button, 0, wxALIGN_CENTER_VERTICAL|wxALL, 0);

// ....

delete pane; // могу я убить все элементы в контейнере так?

Posted: Mon Jan 25, 2010 7:14 pm
by Kolya
monax wrote: delete pane; // могу я убить все элементы в контейнере так?
Нет, безопасней использовать wxWindow::Destroy()
http://docs.wxwidgets.org/trunk/classwx ... 087667b7fc