[wxWidgets] wxListBox::InsertItems
-
Ja, aber wozu brauchst du dafür eine Listbox?
-
zum besseren vergleichen
ich hab es im mom halt so,
da die einträge nach datum/uhrzeit sotiert sind,
soll es beim selektieren einen substring der zeile benutzen
und nach diesem substring in der anderen liste suchen ob dort irgendwo die einträge übereinstimmenoder ja, dafür das der user den gewünschten logeintrag auswählen kann...
mfg,
scythe
-
Schau dir mal wxListCtrl mit Virtual Mode an:
http://docs.wxwidgets.org/stable/wx_wxlistctrl.html#wxlistctrl
-
argh!!!
danke!
ich bin so blinddanke für deine hilfe, wenn ich noch probleme hab komm ich nochmal drauf zurück wenns ok ist
-
Leite eine Klasse von wxListCtrl ab und überschreibe die virtuelle Funktion wxString OnGetItemText(long item, long column) const;
Diese wird autom. aufgerufen, wenn eine Zeile mit Text zu füllen ist, dort gibst du den Text als wxString zurück.
-
danke^^ wurd mir dann gestern auch klar als der mir nen assert ausgespuckt hat:)
wollts dann noch für andere noch hinzufügen falls jemand das gleiche problem hat, aber das hast du ja dann schon übernommen^^ich hab aber auch erstmal dumm gekuckt und mich gefragt was er jetzt noch von mir will, aber nach n bisschen doku lesen hab ich dann den satz gefunden:
This function must be overloaded in the derived class for a control with wxLC_VIRTUAL style. It should return the string containing the text of the given column for the specified item.
und dann wars mir auch klar x) danke
-
problem
ich hab die neue klasse erstellt, funktion überladen etc. is virtual makro ist auch gesetzt hab ich nach gekuggt, nur er füllt mir die liste nicht, da ongetitemtext nicht aufgerufen wird...
jemand ne idee? ich bin am verzweifeln...
-
Also meine Glaskugel ist heute leider defekt
Zeig doch mal was Code
-
hmja, erzeugen tu ichs so:
//Left ListControl m_pListCtrlLeft = new MyWxListCtrl(m_pLeftUpperPanel, ID_WXLISTCTRLLEFT, wxDefaultPosition, wxDefaultSize, wxLC_REPORT | wxLC_NO_HEADER | wxLC_VIRTUAL); wxBoxSizer* sizer1 = new wxBoxSizer( wxVERTICAL ); sizer1->Add(m_pListCtrlLeft, 1, wxEXPAND | wxALL); m_pLeftUpperPanel->SetSizer( sizer1 );
versuchen zu füllen damit:
void Frame::OnMenuFileOpenLeft(wxCommandEvent &event) { wxFileDialog *OpenDialog= new wxFileDialog(this, _T("Choose a file"), _(""), _(""), _("*.*"), wxOPEN); if ( OpenDialog->ShowModal() == wxID_OK ) { const NgTchar* fileName = OpenDialog->GetPath(); m_pFileLineReader = new Util::TextLiner::FileLineReader(); if (m_pFileLineReader != NULL) { String::NgString line; wxArrayString* pLines = m_pListCtrlLeft->GetLines(); for(int i= 0;m_pFileLineReader->ReadLine(line) == true; i++) { pLines->Add(line.CStr()); } m_pListCtrlLeft->SetItemCount(pLines->GetCount()); this->Refresh(); delete m_pFileLineReader; } } OpenDialog->Close(); // Or OpenDialog->Destroy() ? }
und meine klasse schaut so aus:
#ifndef MYWXLISTCTRL_H #define MYWXLISTCTRL_H #ifndef WX_PRECOMP #include "wx/wx.h" #endif #include "wx/listctrl.h" #include "wx/gdicmn.h" class MyWxListCtrl: public wxListCtrl { public: MyWxListCtrl ( wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxLC_ICON, const wxValidator& validator = wxDefaultValidator, const wxString& name = wxListCtrlNameStr ) { wxListCtrl::Create(parent,id,pos,size,style,validator,name); m_plines = new wxArrayString; } wxString OnGetItemText(long item,long column)const { myString = m_plines->Item(item); return myString; } wxArrayString* GetLines() { return m_plines; } private: //wxArrayString wxArrayString *m_plines; }; #endif
danke für deine bemühungen
-
Den Dialog musst du nicht mit new erstellen, und wenn ist Destroy richtig.
Ähnliches gilt für den wxArrayString.Aus dem ListCtrl werd ich aber auch nicht schlau. evtl. an den Construktor weiterleiten, statt Create aufzurufen.
-
argh. ich bin so blöde... ich hab line vergessen nochmal nen dateipfad zu geben weil ichs vorher anders implementiert hatte und line den bekommen hat......-.-"
kein wunder dass er mit einem nicht gefüllten vector nicht ongetitemtext aufgerufen hat... ich bin so hohl... vor allem ich war mir einfach sicher dass des einlesen funktioniert weil ichs vorher ja genauso implementiert hatte... naja egal, auf jeden fall gehts jetzt, dankeund btw. das create stimmt schon. konstruktor aufrufen funkt da nicht... dafür scheint die create_methode anscheinend auch geschrieben worden zu sein