0

在几台计算机上(意味着大多数都很好),当向树控件添加项目时,由于某种原因TreeView_InsertItem返回NULL表示出现问题)。不幸的是,MSDN 站点没有指定设置了错误代码(实际上,调用GetLastError只是告诉我:0 = The operation completed successfully。它也没有指定可能导致失败的原因或如何处理失败。

所以我想知道是否有人以前遇到过这个问题,或者对如何调试问题有任何建议。

这些机器都运行 Windows 7。

免责声明:我实际上正在经历wxWidgets,但我们已经深入研究了代码,问题似乎出在窗口api级别,而不是wx本身。

更新: 基本上,这个想法是,你从这个类继承,然后实现填充,它只是调用AddItem(). 还有一个AddItem()用于指定根项目的版本,但是由于我在第一次调用时失败了Append(),所以它的存在没有帮助。wxFormBuilder使用以下标志创建树:wxTR_DEFAULT_STYLE, wxTR_HAS_BUTTONS, wxTR_HIDE_ROOT, wxTR_LINES_AT_ROOT, wxTR_SINGLE

这在我自己的电脑上也可以正常工作

ItemSelector::ItemSelector( wxWindow* parent )
:    m_tree( NULL ),
    m_initialised( false )
{
    wxXmlResource::Get()->LoadFrame( this, parent, wxT( "ItemSelector" ) );

    m_tree = XRCCTRL( *this, "itemTree", wxTreeCtrl );

    m_rootItem = m_tree->AddRoot( wxT( "ROOT" ) );

    Bind( wxEVT_SHOW, &ItemSelector::OnShow, this );

    MakeModal( true );
}

void ItemSelector::OnShow( wxShowEvent& event )
{
    if( event.IsShown() )
    {
        if( !m_initialised )
        {
            Populate();
            m_initialised = true;
        }

        m_tree->SetFocus();
        Layout();
    }
}

void ItemSelector::AddItem( const wxString& name, void* someData )
{
    //Also tried m_tree->AppendItem( m_rootItem, wxT( "Test" ) ) - same problem
    wxTreeItemId newItem = m_tree->AppendItem( m_rootItem, name, -1, -1, new TreeDataClass( someData ) );
}
4

2 回答 2

0

我在您的代码中没有看到任何真正的错误,但这很奇怪。首先,为什么你叫 deprecatedMakeModal()而不是让你的类 awxDialog并使用它ShowModal()?其次,为什么要等到wxEVT_SHOW填充控件而不是立即执行?

我建议按照指示简化您的代码,我认为问题将消失。如果你很好奇,你可以将你的更改一分为二,找到真正对它负责的那个。

于 2012-09-20T09:39:48.270 回答
0

看起来问题是由于我Populate()从一个wxEVT_SHOW事件中调用的事实。

我发现这一定是一个已知问题,因为wxDialog有一个[wxEVT_INIT_DIALOG][1]事件,正是为了这个目的

于 2012-09-25T10:03:48.793 回答