如何遍历wxNotebook的页面?

时间:2013-10-03 05:20:19

标签: c++ wxwidgets

void Mainframe::OnClearNotebook( wxCommandEvent& e )
{
    int end = m_notebook->GetPageCount();
    for ( int i = 0; i < end; i++ )
    {
        if ( m_notebook->GetPageText( i ) != "Server Log" )
        {
            m_notebook->DeletePage(i);
        }
    }
}

此代码以此形式崩溃,消息“m_notebook-&gt; GetPageText()索引超出范围”;

如何正确浏览所有网页?

编辑,解决方案:

void Mainframe::OnClearNotebook( wxCommandEvent& e )
{   
    while ( m_notebook->GetPageCount() > 1 )
    {
        int end = m_notebook->GetPageCount() - 1;
        if ( m_notebook->GetPageText( end ) != "Server Log" )
        {
            m_notebook->DeletePage(end);
        }
        else
        {
            break;
        }
    }
}

2 个答案:

答案 0 :(得分:3)

如果您要实际删除,那么

GetPageCount()将被更改,因此end将保留早期版本值

对于例如。

m_notebook-&gt; GetPageCount()

中有100个

结束= 100

在迭代10个项目之后,您将删除5个项目,所以现在列表将有95个项目,但您正在迭代到100个 - 这可能是问题

答案 1 :(得分:1)

如果要从非链接列表中删除项目,则需要迭代列表,并收集要在另一个新列表中删除的所有列表项的索引。完成迭代和收集索引后,使用您收集的每个索引在原始列表上调用delete。