In einer ListBox suchen ?



  • Hallo.
    Ich habe es geschafft in einer RichEdit was zu suchen - nun verzweifle ich aber an der ListBox. Diese besitzt leider nicht die Methode FindText();

    Habt ihr eine Idee?



  • IndexOf()



  • Hi Sunday
    danke für den tipp das hatte mich nämlich auf eine idee gebracht

    //wir müssen jeden string durchlaufen und wenn dort unser gesuchtess drin ist - dann
            //die zeile markieren
            int anz = ErrorLB->Items->Count;
            int start = 0;
            for(int zeile = 0 ; zeile<anz ; zeile++)
            {
                    if(ErrorLB->Selected[zeile] == 1)
                    {
                            start = zeile+1;        //wir wollen ja ab der nächsten zeile suchen
                    }
            }
            for(int zeile = start ; zeile<anz ; zeile++)
            {
                    AnsiString string = (*ErrorLB->Items)[zeile];
                    if(string.AnsiPos(SuchenListBox->FindText) != 0)        //wenn der string drin ist
                    {
                            ErrorLB->SetFocus();
                            ErrorLB->Selected[zeile] = 1;
                            ErrorLB->Perform( EM_SCROLLCARET,0,0);          //dahin scrollen
                            //suchfenster in vordergrund bringen
                            SetForegroundWindow(FindWindow(0, "Suchen"));
                            return;
                    }
            }
            ShowMessage((AnsiString)SuchenListBox->FindText + " wurde nicht gefunden");
    

    ist das so gut oder geeht das auch besser zu lösen?



  • oder so:
    😃
    ListBox1:
    Ich
    bin
    ein
    TString
    !!!

    ListBox1->ItemIndex = ListBox1->Items->IndexOf("TString");
    


  • ich habe hier echt nochmal probs.

    also ich scrolle bis jetzt immer an die position. das problem ist - das, wenn der automatisch runterscrollt die zeile auch selektiert die zeile aber ganz unten ist(im bereich des angezeigten textes)
    er soll nach möglichkeit ca. 10 zeilen weiter scrollen - damit das in der mitte zu sehen ist ^^

    habt ihr da ne möglichkeit im auge?

    Ausgabe->Perform( EM_LINEFROMCHAR ,0,0);
    Ausgabe->Perform( EM_SETSCROLLPOS,0,10);
    

    wirft errormessages aus



  • sowas in der Art ?

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    int pos=0;
    AnsiString suchstr="v";
    while(pos<ListBox1->Count&&!ListBox1->Items->Strings[pos].Pos(suchstr)) pos++;
    if(pos==ListBox1->Count) ShowMessage("'"+suchstr+"' wurde nicht gefunden.");
    else
    {
       ListBox1->ItemIndex = ListBox1->Count-1;
       ListBox1->ItemIndex = pos;
    }
    }
    


  • ne so glaube ich nicht.
    das muss mit diesen EM_MESSAGES gehen - da bin ich mir echt sicher - weil das sind ja alles wind00fbotschaften für die richedit. nur ich kenne mich in sachen windowsprogrammierung net so aus 😞

    also er sagt nicht beim compilieren error sondern nur wenn ich in die funktion reingehe und das anwende. und dann ist das so ein fehler - da komme ich net mehr raus - da muss ich das programm zurücksetzen 😞



  • dann so:

    int pos=0;
    AnsiString suchstr="u";
    while(pos<ListBox1->Count&&!ListBox1->Items->Strings[pos].Pos(suchstr)) pos++;
    if(pos==ListBox1->Count) ShowMessage("'"+suchstr+"' wurde nicht gefunden.");
    else
    {
       int mi=pos+10;
       if(mi>=ListBox1->Count-1) mi=ListBox1->Count-1;
       ListBox1->ItemIndex = mi;
       ListBox1->ItemIndex = pos;
    }
    


  • weißt du was mir auffällt?

    die lsitbox kann das bei mir ja mittlerweile ich rede hier aber von einer richedit 🙂

    argh

    man man man. datürlich hast du recht mit deinem ding da. so habe ich es auch für die listbox gelöst.^^
    hmm.
    es geht jetzt um die richedit 🙂 🤡



  • Statt mittendrin das Thema zu wechseln solltest einen neuen Thread anfangen.
    Natürlich nicht, ohne dich zuvor gründlich mit der BCB-Hilfe, der FAQ und der Suchfunktion hier auseinandergesetzt zu haben.



  • jansen glaube mir - das habe ich. ich habe auch die programmierer hier im betrieb gefragt - auch dieses pberbrain kam darauf net wirklich klar ^^



  • String suchstr="r";
    int pos=0;
    while(pos<RichEdit1->Lines->Count&&!RichEdit1->Lines->Strings[pos].Pos(suchstr)) pos++;
    int mi=pos+10;
    if(mi>=RichEdit1->Lines->Count) mi=RichEdit1->Lines->Count;
    RichEdit1->SelStart = RichEdit1->Perform(EM_LINEINDEX, mi, 0);
    RichEdit1->Perform(EM_SCROLLCARET, 0, 0);
    RichEdit1->SelStart = RichEdit1->Perform(EM_LINEINDEX, pos, 0);
    RichEdit1->SelLength = RichEdit1->Lines->Strings[pos].Length();
    RichEdit1->Perform(EM_SCROLLCARET, 0, 0);
    RichEdit1->SetFocus();
    

Anmelden zum Antworten