2016-08-20 12 views
2

wxScrolledWindowオブジェクトに要素(画像)が埋め込まれています(すべての要素に、dc.paintを使用するThumbNailクラスが追加されています)。私は新しい要素を一度(同じ番号ではない)(ユーザーのフォルダの変更)で動的に変更したいと思います。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(); 
    } 

しかし、私は上記の行ったように動作しません、後ろに新しい要素を入れて...

をどれでもどのようにこれを行うアイデアやWeb上のヘルプを見つけることでしたか?ありがとう!

+0

'lst.back()'は最後の要素をリストから削除しません。 'pop_back()'もやる必要があります。 'while'ループは、私が知る限り、無限ループになります(または、同じポインタに対して' Destroy'を繰り返し呼び出す混乱を繰り返します)。その代わりに、子プロセスをsizerから削除する必要があります。 '_ScrolThumbs - > GetSizer() - > Clear(true);'を実行するだけです。新しい子を追加した後、 '_ScrolThumbs-> Layout();'を実行します。私はあなたが「うまくいかない」ということについての十分な情報を与えていないので、これがどの程度助けになるか分かりません。私が助けてくれれば、これを答えに入れることができます。 – bogdan

+0

トピックを外しています:アンダースコアと大文字で始まる識別子を使用することは、C++ではユーザコードで不正です - 実装のために予約されています。 – bogdan

+0

ありがとうございます!これはトリックを行います:)。私は '_'をチェックアウトします。私は間違った座席でそれを拾い上げた。 (申し訳ありませんが私はあなたに正しい答えの賞を与えることはできません)。コードを書く上での良い習慣についての規則はありますか? –

答えて

1
_ScrolThumbs->GetSizer()->Clear(true); 
// or 
_ScrolThumbs->DestroyChildren(); 
関連する問題