使用虚拟列表控件的AppendCollumn应用崩溃

问题描述

我是一个业余程序员,仍在学习C ++和wxWidgets。 我在Windows 10 Pro计算机上使用Code :: Blocks 20.3,wxWidgets 3.1.4和MinGW 17.1。

我正在尝试在Code :: Blocks中使虚拟wxListCtrl工作, 我遵循了ListCtrl示例中的代码以及wxWidgets讨论论坛中的一个简单示例。 示例代码(1个文件)在编译和工作时均有效。 当我在Code :: Blocks中启动新项目时,GUI APP和MAIN被编码在单独的文件中。 也许我需要做更多的事情,但是找不到它。 该项目编译时错误和警告为零,但在启动时显示以下错误。 我尝试将SetItemCount()移到AppendCollumn()上方,但这没有帮助。 将两个AppendColumn()都注释掉时没有错误,但是列表当然为空。

有人可以帮我解决代码中缺少的内容吗?

谢谢,Ruud

错误:

A debugging check in this application has failed
../../src/cpmmon.listctrlcmn.cpp(259):
 assert "Assert Failure" failed in OnGetItemText():
 wxListCtrl::OnGetItemText not supposed to be called

GUI代码:

GUIFrame::GUIFrame( wxWindow* parent,wxWindowID id,const wxString& title,const wxPoint& pos,const wxSize& size,long style ) : wxFrame( parent,id,title,pos,size,style )
{
    this->SetSizeHints( wxDefaultSize,wxDefaultSize );

    wxBoxSizer* bSizer1;
    bSizer1 = new wxBoxSizer( wxVERTICAL );

    m_listCtrl1 = new wxListCtrl( this,wxID_ANY,wxDefaultPosition,wxDefaultSize,wxLC_REPORT|wxLC_VIRTUAL );
    bSizer1->Add( m_listCtrl1,1,wxALL|wxEXPAND,10 );

    this->SetSizer( bSizer1 );
    this->Layout();

    // Connect Events
    this->Connect( wxEVT_CLOSE_WINDOW,wxCloseEventHandler( GUIFrame::OnClose ) );
}

GUIFrame::~GUIFrame()
{
    // Disconnect Events
    this->Disconnect( wxEVT_CLOSE_WINDOW,wxCloseEventHandler( GUIFrame::OnClose ) );
}

主要代码:

#include "VlistMain.h"

const wxChar *SMALL_VIRTUAL_VIEW_ITEMS[][2] =
{
    { wxT("Cat"),wxT("meow") },{ wxT("Sheep"),wxT("baaah") }
};

VlistFrame::VlistFrame(wxFrame *frame) : GUIFrame(frame)
{
    m_listCtrl1->AppendColumn("Animal");
    m_listCtrl1->AppendColumn("Sound");
    m_listCtrl1->SetItemCount(WXSIZEOF(SMALL_VIRTUAL_VIEW_ITEMS));
}

wxString VlistFrame::OnGetItemText(long item,long column) const
{
    return SMALL_VIRTUAL_VIEW_ITEMS[item][column];
}

事件表:

wxBEGIN_EVENT_TABLE(MyListCtrl,wxListCtrl)
    EVT_LIST_ITEM_SELECTED(wxAny,MyListCtrl::OnSelected)
wxEND_EVENT_TABLE()

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)