I
Hi,
ich weiss zwar ehrlich gesagt nicht, ob dies genau das ist was du suchst, aber folgender Code ermoeglicht dir die Suche in einem Listenfeld analog zur Suche, wie man sie in .chm Hilfen z.B. findet. Das heisst, der User gibt einen Buchstaben ein und das entsprechende Feld mit dem gleichen Anfangsbuchstaben wird selektiert. Beim zweiten Buchstaben rutscht die Auswahl dann weiter usw. Musst du natuerlich noch ein bisschen anpassen.
void CProjektView::OnChangeSuche()
{
// Parameter setzen
UpdateData(TRUE);
SetCurSel(0);
SetFlags();
m_bDsErster = true;
// Die Anzahl der Zeichen im Suchstring
int suchanzahl;
// Subitem fuer die Suche in Name oder Vorname
int subitem = 0;
// Gesamtanzahl der items im ListView
int itemgesamt = m_MainList.GetItemCount()+2;
int zaehler = 0;
// initialisiert die Variable fuer die Suche
int found = 0;
// temporaere Variable fuer m_MainSuche
CString suchtext;
// temporaere Variable fuer die Texte des Listviews
CString viewtext;
// Auslesen, ob nach Name oder Vorname gesucht
// werden soll
if(m_RadioName == 0) subitem = 2;
else subitem = 3;
// Inhalt von m_MainSuche holen
UpdateData(TRUE);
m_MainSuche.GetWindowText(suchtext);
//suchtext = m_MainSuche;
// Konvertierung in Kleinschreibung, um die Suche unabhaengig zu machen
suchtext.MakeLower();
suchanzahl = suchtext.GetLength();
// Duchlaufen des ListViews und Vergleich mit dem Suchstring
while(found == 0)
{
// Den Text im ListView zurecht kneten :clown:
viewtext = m_MainList.GetItemText(zaehler,subitem);
viewtext = viewtext.Left(suchanzahl);
viewtext.MakeLower();
if(viewtext.Compare(suchtext) == 0)
{
found = 1;
}
zaehler++;
if(zaehler == itemgesamt)
break;
};
// Wenn ein Eintrag gefunden wurde das entsprechende item markieren
if(found == 1)
{
m_MainList.SetItemState(zaehler-1,LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
// alle Parameter fuer Auswahl, Datensatz usw. setzen
SetCurSel(zaehler);
SetFlags();
m_MainList.EnsureVisible(zaehler-1,FALSE);
if(zaehler > 1)
m_bDsErster = false;
}
UpdateData(FALSE);
}
Gruss
Ralf