2016-08-20 7 views
2

У меня есть объект wxScrolledWindow, заполненный элементами (изображениями) (каждый элемент добавляет класс ThumbNail, который использует dc.paint). Я хотел бы динамически изменять элементы с помощью нового раза (не одного и того же числа) (изменение папки пользователем).wxScrolledWindow добавить и удалить элементы

Как я могу удалить все элементы в объекте wxScrolledWindow и снова добавить новый? А затем сбросьте полосы прокрутки.

_ScrolThumbs = new wxScrolledWindow(_pMainPanel); 

     wxGridSizer *m_swSizer = new wxGridSizer(1,1,0); 
     _ScrolThumbs->SetSizer(m_swSizer); // Sets the window to have the given layout sizer. 
std::vector<ThumbNail*> _Thumbs; 
     for(int i=0;i < FilePr::Instance()->GetNumThumbs() ;i++) 
     { 
      _Thumbs.push_back(new ThumbNail(_ScrolThumbs, PicName[i])); 
      _ScrolThumbs ->GetSizer()->Add (_Thumbs[i], 1, wxALL|wxALIGN_CENTER_VERTICAL, 5); 
     } 

Затем я попытался сделать это (когда кнопка хит):

wxWindowList& lst = _ScrolThumbs->GetChildren(); 
    //if (!lst.empty()) 
    std::cout << lst.size() << '\n'; 
    while(!lst.empty()) //for(int i = 0; i < lst.size(); i++) //lst.size() 
    { 
     wxWindow *wnd = lst.back(); 
     wnd->Destroy(); 
    } 

Но положить новые элементы обратно, как я выше не работает ...

Любой идеи, как это сделать или найти помощь в Интернете? Благодаря!

+0

'lst.back()' не удаляет последний элемент из списка; вам также нужно сделать 'pop_back()'. Цикл 'while' будет бесконечным циклом, насколько я могу судить (или вызовет беспорядок, вызывающий' Destroy' на том же указателе несколько раз). Вместо этого вы должны удалить дочерние элементы из sizer: просто сделайте '_ScrolThumbs -> GetSizer() -> Clear (true);'. После добавления новых детей создайте '_ScrolThumbs-> Layout();'. Я не знаю, насколько это поможет, поскольку вы не дали достаточной информации о том, что означает «не работает». Я могу поставить их в ответ, если это поможет. – bogdan

+0

Off topic: использование идентификаторов, начинающихся с подчеркивания и заглавной буквы, является незаконным в C++ в коде пользователя - они зарезервированы для реализации. – bogdan

+0

Спасибо LOT !! это делает трюк :). Я проверю «_». Я подхватил это неправильно. (Извините, я не могу дать вам правильный ответ). Существуют ли правила хорошей практики написания кода? –

ответ

1
_ScrolThumbs->GetSizer()->Clear(true); 
// or 
_ScrolThumbs->DestroyChildren(); 
Смежные вопросы