0

いくつかのコンピューター (つまり、ほとんどのコンピューターで問題ありません) では、アイテムをツリー コントロールに追加すると、何らかの理由で(何かが間違っていることを示すTreeView_InsertItem)が返されます。残念ながら、MSDN サイトでは、エラー コードが設定されていることを指定していません (実際、GetLastErrorを呼び出すと、単純に次のように通知されます: 。エラーの原因や対処方法も指定されていません。NULL0 = The operation completed successfully

だから、誰かが以前にこれに遭遇したことがあるかどうか、または問題をデバッグする方法について何か提案があるかどうか疑問に思っています。

マシンはすべて Windows 7 を実行しています。

免責事項: 私は実際wxWidgetsに.apiwx

更新: 基本的には、このクラスから継承し、単純に を呼び出す populate を実装するという考え方ですAddItem()。ルート アイテムを指定するための のバージョンもありますがAddItem()、 の最初の呼び出しで失敗するためAppend()、その存在は役に立ちません。ツリーはwxFormBuilder、次のフラグで作成されます。wxTR_DEFAULT_STYLE, wxTR_HAS_BUTTONS, wxTR_HIDE_ROOT, wxTR_LINES_AT_ROOT, wxTR_SINGLE

これは、自分のPCからも完全に正常に動作します

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

あなたのコードには特に問題はありませんが、かなり奇妙です。MakeModal()まず第一に、クラスを awxDialogにしてその を使用する代わりにdeprecated を呼び出すのはなぜShowModal()ですか? wxEVT_SHOW2 つ目は、すぐにコントロールを設定するのではなく、コントロールを設定するまで待つ必要があるということです。

示されているようにコードを単純化することをお勧めします。問題はなくなると思います。興味がある場合は、変更を分割して、実際に原因となったものを見つけることができます。

于 2012-09-20T09:39:48.270 に答える
0

イベントPopulate()から呼び出していたため、問題が発生したようです。wxEVT_SHOW

正確にこの目的のためwxDialogのイベントがあるため、これは既知の問題であるに違いないことを発見しました[wxEVT_INIT_DIALOG][1]

于 2012-09-25T10:03:48.793 に答える