UpdateData und List Control - Konflikt
-
Moin,
Ich hab ein List Control wo man was auswählen kann dies wird dann in Editboxen angezeigt.
Nun hab ich das Problem das .GetCurSel() bzw. .SetSel(nPos) von dem List Control nicht mehr funktioniert, wenn ich UpdateData(true) bzw. UpdateData(false) benutze.
Aber wenn ich dies nicht benutze gehen meine Editboxen ja nicht anzusteuern.
Code:
int nSelectPos = m_CtrlList.GetCurSel();// Selected Feld hohlen - geht
m_csEditBox = "Hallo Mama!"; // Editboxvariable setzenm_CtrlList.SetSel(nSelectPos ); // functioniert nicht
UpdateData(false); // Um "Hallo Mama!" zu senden
m_CtrlList.SetSel(nSelectPos ); // auch hier funxtionierts nichtAlso mit Functioniert nicht meine ich das nix Ausgewählt ist. Mein List Control ist Einfachauswahl, somit ist GetCurSel() auch functionsfähieg.
-
Ich kenne mich zwar nicht so gut aus, aber mir sind 2 Sachen aufgefallen:
UpdateData(TRUE) //und UpdateData(FALSE) //Meines Wissens nach wird TRUE und FALSE groß geschrieben?
Aber ich nehme an, dass es bei Dir daran nicht liegt?
-
nein, nein, du kannst es groß oder klein schreiben also entw. true oder TRUE, bzw. false oder FALSE.
ich glaube aber, der Befehl heisst SetCurSel(int pos);
-
Hallo !
GetCurSel() gibt doch den Index der aktuellen Auswahl zurück.
Mit
int nSelectPos = m_CtrlList.GetCurSel();// Selected Feld hohlen - geht
speicherst du also den Index (z.B. "5" wenn das sechste Listboxelement ausgewählt wurde) in der Variablen nSelectPos. -> OKDann liest du mit
m_csEditBox = "Hallo Mama!"; // Editboxvariable setzen
etwas in die Variable m_csEditBox ein. -> OKDann willst du mit
m_CtrlList.SetSel(nSelectPos); // functioniert nicht
irgendeinen Eintrag in der Listbox auswählen. In der Variablen nSelectPos ist aber immernoch der gleiche Wert gespeichert, den du vorhin eingelesen hast ("5" aus meinem Beispiel). Den Index lässt du anzeigen und der ist genau der gleiche, wie der, der sowieso schon angezeigt wird. -> keine Änderung.Dann aktualisierst du mit
UpdateData(false); // Um "Hallo Mama!" zu senden
die Editfelder. -> OKUnd jetzt willst du wieder mit
m_CtrlList.SetSel(nSelectPos ); // auch hier funxtionierts nicht
etwas in der Listbox auswählen, obwohl sich die Variable nSelectPos immernoch nicht geändert hat. Es wird also schon wieder NIX NEUES ausgewählt. -> keine Veränderung zu sehenDu hast keine Verbindung zwischen der ListBox und dem Editfeld !
Du könntest z.B. mit GetText() oder so nach einem Eintrag in der ListBox suchen, nachdem du das Editfeld in eine Variable ausgelesen hast.
Das mit dem Index (nSelectPos) wird wohl nicht klappen, da dieser dem Editfeld völlig unbekannt ist...Tschüss
-
Also,...
...um mal von Vorne anzufangen, ich möchte eigendlich an der Selection nichts verändern. Hatte nur SetSel(*) damit die Selection da bleibt wo sie ist, denn sobald ich UpdateData(false oder true) benutze verschwindet meine Selection merkwürdiegerweise. Aber dies geschieht auch wenn ich sie wider versuche zu senden.Ich dachte immer das dies funktionierem müsse:
int nSelectPos = m_CtrlList.GetCurSel();// Selected Feld hohlen - geht
m_csEditBox = "Hallo Mama!"; // Editboxvariable setzen
UpdateData(false); // Um "Hallo Mama!" zu senden
Aber leider ist nach diesem Code kein Feld im List Control mehr ausgewählt.
-
kann es sein, dass du ein ListBox und nicht ein ListCtrl benutzt??
bei einem ListCtrl gibt es 'GetCurSel' überhaupt nicht.
Da muste dann schon 'CListCtrl::GetSelectionMark' benutzen, um die Positionen des aktuell selektierten Items zu bekommen.
-
Ähm,... NEIN!!!...
...es gibt GetCurSel() und es funktioniert auch solange ich nicht UpdateData in irgeneiner for benutze... Sobald ich UpdateData benutze liefert mir GetCurSel immer -1 zurück.Ich verzweifel schon fast. Könnte es auch daran liegen das die beiden Funktionen (UpdateData und GetCurSel) zusammen koledieren?
*
*
-
es tut mir leid, aber
CListCtrl::GetCurSel existiert nicht!!
es existiert nur:
CListBox::GetCurSelalso bei funtioniert dein code (natürlich nur bei einer ListBox) einwandfrei, obwohl ich nicht verstehe, wieso du überhaupt nach GetCurSel wieder SetCurSel aufrufst?!
Striker