Autovervollständigung
-
Na, du musst das erstmal füllen.
Bei mir sieht das so aus:
void CArtikelView::LadeFirmen() { CFirmenSet set; set.Open(); while(!set.IsEOF()) { m_cbxHersteller.AddItem(set.GetBezeichnung(), set.GetID()); set.MoveNext(); } set.Close(); }
AddItem ist eine eigene Funktion, die in einem Schritt den String hinzufügt UND das ItemData setzt, damit ich das später identifizieren kann.
int CAdCbx::AddItem(CString f_strText, DWORD f_nData) { int nIdx = AddString(f_strText); SetItemData(nIdx, f_nData); return nIdx; }
Okay?
-
Mehr oder weniger Okay!
m_cbxHersteller.AddItem(set.GetBezeichnung(), set.GetID());
Was für ein Typ ist denn die Membervariable m_cbxHersteller, was macht GetBezeichnung im Prinzip mit Sicherheit getFieldValue,
oder??
-
m_cbxHersteller ist im Prinzip eine CComboBox (eben meine eigene Combobox), also eine Controlvariable.
Ich arbeite ja irgendwie anders mit den Recordsets als du.
GetFieldValue nutze ich nirgens direkt. Wenn überhaupt, dann indirekt im DoFieldExchange.
Ich lasse mir da nur das geben, was im Feld "Bezeichnung" in der aktuellen Zeile drin steht.
-
Also ich bring das nicht so ganz auf die Reihe, wo muss denn das AddItem stehen? Und sind AddString und SetItemData von dir implementiert? Denke wohl nicht er sagt mir aber undeclared identifier, was für includes hast du denn??
Ich habe eine Membervariable auf meine Combo gelegt und wenn ich die.addItem mache dann sagt er addItem is not a member of CString
-
Hi,
du musst die ComboBox auch vom Typ "CComboBox" machen, sonst kannst du nicht die Methoden der ComboBox benutzen.
Aber es ist kein problem, man kann auf ein Control mehrere Membervariablen legen.Du kannst dann auf beide zugreifen:
UpdateData(false); m_strCombo.Replace("a","b"); m_ctlCombo.AddString("bla");
Du musst dann mit ner Schleife wie estardu schon geschrieben hat nur noch die ComboBox füllen, die Auswahl des Benutzer kannst du dann ganz einfach nach nem UpdateData aus dem CString auslesen.
mfg
tobi
-
OK OK stimmt das war richtig, ich hatte nur eín String, hab es jetzt aber auf ein Combo geändert und hab gleiches Problem, addItem ist einfach kein Member von CCombobox.
Sorry entweder ich steh grad aufm Schlauch oder ich bin einfach zu doof dazu!
-
estartu_de schrieb:
AddItem ist eine eigene Funktion, die in einem Schritt den String hinzufügt UND das ItemData setzt, damit ich das später identifizieren kann.
int CAdCbx::AddItem(CString f_strText, DWORD f_nData) { int nIdx = AddString(f_strText); SetItemData(nIdx, f_nData); return nIdx; }
-
aber wie kann ich denn dann drauf zugreifen? hab es voll nach deinem Schema gemacht,
m_PCD_CMB.AddItem(getSearchResultPCD());
'AddItem' : is not a member of 'CComboBox'
-
estartu_de schrieb:
m_cbxHersteller ist im Prinzip eine CComboBox (eben meine eigene Combobox), also eine Controlvariable.
Heisst nichts anderes, als dass sie eine eigene Klasse von CComboBox abgeleitet hat. Sieht man übrigens auch an dem Quellcode, den ich in meinem letzten Beitrag zitiert habe.
Bitte in Zukunft die Antworten, die man dir gibt, etwas genauer lesen.
-
OK ihc hatte Gestern anscheinend nicht mehr die Konzentration, als ich mir das heute morgen angeschaut hab, hba ich mir gleich gedacht oh Gott was macht der da! Naja, jetzt hab ich es hin bekommen!
Tow-B.de schrieb:
die Auswahl des Benutzer kannst du dann ganz einfach nach nem UpdateData aus dem CString auslesen.
also wie ich jetzt die Auswahl bekomme ist mir noch nicht ganz klar, kann mir das einer noch mal ganz einfach erklären? Ich hab das jetzt mal so gemacht.
CDBVariant varValue; UpdateData(TRUE); short nFields = m_pSet->GetODBCFieldCount(); for( short index = 0; index < nFields; index++ ) { m_pSet->MoveFirst(); while (!m_pSet->IsEOF()) { m_pSet->GetFieldValue( index, varValue ); m_PCD_CMB.AddString(*(varValue.m_pstring)); m_pSet->MoveNext(); } } UpdateData(FALSE); }
-
Du machst einfach zusätzlich zur Controlvariablen noch eine Wertevariable (CString) an die Combobox.
-
wie mach ich die bitte an die Combobox? Denn im DataExchange kann ich mit
DDX_CBIndex(pDX, IDC_COMBO1, m_test);
eine int Variable anlegen, aber wie mache ich eine String Variable? So wie ich das mache geht das glaub net!
-
War aber fast richtig, du hast nur das falsche DDX genommen.
Nimm DDX_TEXT:
DDX_Text(pDX, IDC_COMBO1, m_test);
Da hast das VC7? Ist das so grausig, dass man sogar DDX von Hand machen muss? *grusel*
Ich dachte, ich wär blos zu unflexibel dafür...
-
hm OK ich dachte ich könne jetzt dann einfach den String nehmen in dem ich
CComboBox * combo; combo = (CComboBox *) GetDlgItem(IDC_COMBO1); m_Selected = combo->GetCurSel(); UpdateData(FALSE);
mache, aber da steht dann in m_Selected meinemum Combo assozierten String immer nur so ein doofer Strich drin!
Wie greif ich jetzt richtig und elegant drauf zu, und ist es sinnig über OnKillFocus das zu machen??
-
Ähm, du hast aber schon ein Tutorial zu Dialogelementen und den Zugriff darauf angeguckt, oder?
m_Selected ist ein CString? Warum weist du ihm dann bitte eine Zahl zu?
m_Selected = combo->GetCurSel();
Mach UpdateData(TRUE); und DANACH steht in dem String der gewählte Text.
GetCurSel brauchst du dann nur noch, falls nix ausgewählt ist, als Fehlerüberprüfung - wobei ich vermute, dass dann ein Leerstring geliefert wird.
-
He He OK ich gib zu ich hatte nicht viel dazu gemacht aber ich hab ein Tut angescaut aber anscheinend nicht genug, hab es jetzt mal angeschaut und des geht ja tatsächlich! Wie schön! Nur einen kleinen Fehler hast auch du gemacht es muss heißen UpdateData(TRUE); nicht False!
Wenn ich jetzt auf nen Button mache
UpdateData(TRUE); m_Suche = m_Selected; UpdateData(FALSE);
steht in beiden Members das richtige drin, mach ich das aber da,
void CDokumentenVerwaltungView::OnSelchangeCombo1()
dann geht es nicht, dann hab ich in beiden ein leerstring, woran liegt das??
-
Ups, mein Lieblingsfehler...
*korrigier*
UpdateData funktioniert in OnSelchange nicht. Da musst du was anderes machen.
Das ist auch der Grund, warum ich es gar nicht nutze. Ich arbeite mit ItemData.Versuch mal GetWindowText im OnSelchange.
-
*doppelpost*