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

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
monax
In need of some credit
In need of some credit
Posts: 6
Joined: Fri Jul 10, 2009 6:26 pm
Contact:

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

Post by monax » Thu Dec 31, 2009 3:22 pm

Нужно удалить контролы, которые добавляются динамически.

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 не получается. И в итоге приложение ложится.

van_user
Experienced Solver
Experienced Solver
Posts: 55
Joined: Wed Jun 11, 2008 9:28 pm
Location: UA

Post by van_user » Mon Jan 04, 2010 11:11 am

Sizer :: Detach используешь? Код удаления контроллов где?

monax
In need of some credit
In need of some credit
Posts: 6
Joined: Fri Jul 10, 2009 6:26 pm
Contact:

Post by monax » Fri Jan 08, 2010 8:09 pm

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; // могу я убить все элементы в контейнере так?

Kolya
Experienced Solver
Experienced Solver
Posts: 85
Joined: Mon Dec 11, 2006 11:35 am
Location: /dev/null

Post by Kolya » Mon Jan 25, 2010 7:14 pm

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

Post Reply