wxSpeziFisch
-
Guten Morgen,
ist wirklich wxWindows-spezifisch:
Eine wxCheckListBox erbt laut Doku von wxListBox, und dort gibt es die Methodeint GetCount() const // aber mit if(m_p_chklstbox->GetCount() < 1)
mach ich wieder meinem Namen alle Ehre
Hat da jemand ErfahrungThanx
SF
-
m_p_chklstbox == NULL ?
-
NULL is sie nicht (laengstens initialisiert), will nur wissen, ob schon was dirnsteht, in der "wxCheckLISTBox"
SF
-
Wie sieht der Konstruktor-Aufruf aus?
Teste mal folgenden Code:
wxString str[]={"eins", "zwei"}; wxCheckListBox* clb = new wxCheckListBox(this,ID_CLB,wxPoint(100,100),wxSize(200,200),2,str); if(clb->GetCount()==2) wxMessageBox("GetCount()==2","Info",wxOK);
Edit: ID_CLB ist natürlich die zu clb gehörende ID (z.B. 42)...
-
hi,
der Aufruf ist'n bisschen komplexer:
//Aufruf m_p_chklstbox = LibaseChkLstBox(m_p_editmask, 104, wxPoint(20, 100), wxSize(150, 200), 0, NULL, wxLB_SINGLE | wxLB_NEEDED_SB | wxLB_SORT, idl, "Excludes", "Pages/directories to exclude:\n(But search bor links?)", wxDefaultValidator); ... // mit Inhalt wird sie wie folgt gefuellt: for(size_t i = 0; i < m_p_pro_lines->GetCount(); i++){ // Non link following excludes if(operator==(GetProfLabel(m_p_pro_lines->Item(i)), "exclude|")){ m_p_chklstbox->Append(RemProfLabel(m_p_pro_lines->Item(i))); m_p_chklstbox->Check(m_p_chklstbox->FindString(RemProfLabel(m_p_pro_lines->Item(i))), false); continue; } // Link following excludes if(operator==(GetProfLabel(m_p_pro_lines->Item(i)), "exclude+|")){ m_p_chklstbox->Append(RemProfLabel(m_p_pro_lines->Item(i))); m_p_chklstbox->Check(m_p_chklstbox->FindString(RemProfLabel(m_p_pro_lines->Item(i))), true); continue; } ... } ... // Erzeugt ChkLstBox mit Label (Methode) wxCheckListBox *LibaseProfile::LibaseChkLstBox(wxWindow* parent, wxWindowID id, wxPoint pos, wxSize size, int n, const wxString choices[], long style, wxWindowID& idl, const wxString& name, const wxString& label, const wxValidator& validator = wxDefaultValidator) { m_p_label = new wxStaticText(parent, idl, label, pos, wxDefaultSize, wxALIGN_LEFT); unsigned int MaxSizeOfLine = 0; size_t br = label.Find("\n"); wxString firstline = label.Mid(0, br); MaxSizeOfLine = firstline.length(); MaxSizeOfLine = (MaxSizeOfLine*5); m_p_chklstbox = new wxCheckListBox(parent, id, wxPoint(pos.x + MaxSizeOfLine, pos.y - 5), size, n, choices, style, wxDefaultValidator, name); return m_p_chklstbox; }
Das heisst, dass sie erst einmal leer erzeugt wird, und dann mit bestimmten Inhalten aus dem wxArrayString *m_p_pro_lines befuellt wird, das funzt auch alles supergut, nur wenn dann eben was neues dazu soll, kommt eben wieder mein Name ins Spiel
/edit: Es kann kann ja auch sein, dass nix drinsteht, und das muss ich im Bearbeitungsfenster der Eintraege halt wissen!SF
-
Hmm, nicht das ich da jetzt durchblicken würde, aber erstellst du in der Fkt. LibaseProfile::LibaseChkLstBox dynamisch eine CheckListBox und gibst einen Pointer darauf zurück, um in anderen Fkt'en darauf zuzugreifen? Das kann ja nicht gut gehen!
Undefiniertes Verhalten?!?
-
Warum nich? m_p_chklstbox ist'n private member von LibaseProfile, und, wenn mal man von m_p_chklstbox->GetCount() absieht, klappt ja auch jeder Zugriff drauf.
Was kapier ich da nicht? Warum muss das schief gehn? Wieso fuehrt das zu undef. Verhalten?
Ich mein so tief steck ich noch nich drin, waer also fuer genau diese Erklaerung dankbar...Muss aber nicht mehr heut Nacht sein -> Gute Nacht()
SF
-
Sorry, vielleicht war ich da ein wenig voreilig
Was ich aber noch nicht verstehe:m_p_chklstbox = LibaseChkLstBox(...) ... wxCheckListBox *LibaseProfile::LibaseChkLstBox(...) { m_p_chklstbox = new wxCheckListBox(...); return m_p_chklstbox; }
Sollte mich auch lieber ein Ründchen hinlegen -> Gute Nacht()
-
nee, ich war vorlaut, m_p_chklstbox->KlapptGarNixMehr(true)!
War vorher ein schlichtes StringArray, vor meinem UmbauMuss ich dann m_p_chklstbox via new, mit eigenem Konstruktor...
Naja, morgen (oder so), bin jetzt wirklich zu muedeEndgueltig gute Nacht
SF
-
moin moin,
hab da noch ein bisschen rumprobiert:
Es passiert alles in einer Klasse namens LibaseProfile, die hat eben die Membervariable wxCheckListBox *m_p_chklstbox, Inhalt wird ihr in einer Methode namensvoid LibaseProfile::LibaseProfilePanel (wxArrayString *m_p_pro_lines, wxNotebook *notebook);
mit dem oben beschriebenen Aufruf zugewiesen, mittels einer anderen Methode namens
wxCheckBox *LibaseProfile::LibaseCheckBox(wxWindow* parent, wxWindowID id, wxPoint pos, wxSize size, long style, const wxValidator& validator, const wxString& name, const wxString& label, wxWindowID& idl, bool value = FALSE);
In der Methode LibaseProfilePanel, in der m_p_chklstbox = LibaseCheckBox(...) aufgerufen wird, kann ich auf m_p_chklstbox->allesMoegliche() zugreifen.
Nun wird aber per Knopfdruck eine weitere Methodevoid OnNewExclude(wxCommandEvent &event){ int update = LibaseExcludeWindow(m_p_chklstbox, -1); }
aufgerufen, die wiederum eine weitere Methode LibaseExcludeWindow(...) aufruft, in der ich auf m_p_chklstbox zugreifen koennen moechte.
Nur kann ich das nicht
Und eben das versteh ich nicht, ist doch ein private member.
Wo klemmts da bei mir? Ich uebergeb sie schon, wobei vermutlich das Argument beim Aufruf schon hinfaellig ist, wenn ich in LibaseExcludeWindow(...) schon nicht drauf zugreifen kann, kann ich es in OnNewExclude(..) mit Sicherheit auch nicht, nur warum nichtKann mir das einer erklaeren?
Thanx SF
-
Segmentation Faulter schrieb:
ist wirklich wxWindows-spezifisch
Das Forum schrieb:
Hier könnt ihr Fragen rund um Standard-C++ stellen. Dazu gehören auch Fragen zur STL bzw. zur Standardbibliothek.
kein weiteres Komentar.