ListBox-Hilfe benötigt



  • 1. Hallo, wie kann ich mein Programm so umschreiben, dass in einem Label angezeigt wird, wieviele Zeichen der Eintrag, den man mit doppelklicken in der ListBox1 ausgewählt hat, lang ist ?

    Also ich habs so irgentwie versucht, aber ich komm auf keinen grünen Zweig.
    Bitte helfen!

    void __fastcall TForm1::ListBox1DblClick(TObject *Sender)
    {
    int Anzahl,x,summe,i;
    
    x=ListBox1->ItemIndex;
    
        for(x=Anzahl;x>=1;x--)
         {
          switch(ListBox1->Items->Strings[x])
          case 'a':
          case 'b':
          case 'c':
          case 'd':
          case 'e':
          case 'f':
          case 'g':
          case 'h':
          case 'i':
          case 'j':
          case 'k':
          case 'l':
          case 'm':
          case 'n':
          case 'o':
          case 'p':
          case 'q':
          case 'r':
          case 's':
          case 't':
          case 'u':
          case 'v':
          case 'w':
          case 'x':
          case 'y':
          case 'z':
    
             {
           summe++;
             }
         }
    
    Panel1->Visible=true;
    Label1->Caption="Der gewählte Eintrag ist " + IntToStr(summe)+ " Zeichen lang.";
    }
    //---------------------------------------------------------------------------
    

    2. Ich möchte einen markierten Eintrag per ENTFERNEN-Taste löschen!
    Es geht zwar, aber sicher nicht RICHTIG^^ Kann das wer umschreiben?
    BITTE!!!

    void __fastcall TForm1::ListBox1KeyDown(TObject *Sender, WORD &Key,
          TShiftState Shift)
    {
    int i;
    if (Key==46)
     {
         for (i=0;i<ListBox1->Items->Count;i++)
         {
           ListBox1->Items->Delete(i);
         }
    
     }
    }
    

    Vielen Dank im Voraus!
    MFG



  • zu 1.) Schau Dir mal die Eigenschaft ItemIndex von TListBox in Verbindung mit TListBox::Items[] Length() in der Hilfe an.

    zu 2.) siehe eigentlich wieder 1.) ItemIndex wird Dein Freund sein.

    Gruss



  • Ja dort hab ich eh auch schon nachgeschaut aber ich werd daraus nicht schlau.. sry 😕



  • Warum nich?



  • weil ich nich weiß was ich nun tun soll -.-



  • Ist dir denn klar, was die Member-Funktion ItemIndex() macht?



  • Hallo

    TListBox::ItemIndex ist doch keine Funktion, sondern eine Eigenschaft.

    Letztendlich kann man die beiden Probleme auf je einen Einzeile reduzieren
    1.

    Label1->Caption = ListBox1->Items->Strings[ListBox1->ItemIndex].Length();
    
    ListBox1->Items->Delete(ListBox1->ItemIndex);
    

    Natürlich sollte vorher auf jedenfall geprüft werden ob überhaupt etwas ausgewählt ist (ItemIndex != -1)

    bis bald
    akari



  • akari schrieb:

    TListBox::ItemIndex ist doch keine Funktion, sondern eine Eigenschaft.

    Huuups. 🙄



  • Danke
    1. ist abgehackt. gelöst. Danke akari!

    2. Ja es geht SCHON, aber wie vorher.
    Alles was über dem markierten Eintrag ist, wird auch mitgelöscht.
    Da muss man glaub ich die for-Schleife anders machen..
    Aber ich hab keine Ahnung wie...

    MFG

    void __fastcall TForm1::ListBox1KeyDown(TObject *Sender, WORD &Key,
          TShiftState Shift)
    {
    int i;
    
    if (Key==46)
     {
         ListBox1->ItemIndex != -1;
         for (i=0;i<ListBox1->Items->Count;i++)
         {
           ListBox1->Items->Delete(ListBox1->ItemIndex);
         }
    
     }
    }
    

    edit:
    ok habs selber geschafft.
    Lösung:

    void __fastcall TForm1::ListBox1KeyDown(TObject *Sender, WORD &Key,
          TShiftState Shift)
    {
    int i;
    
    if (Key==46)
    {
    for (i=ListBox1->Items->Count-1;i>=0;i--)
    {
     if (ListBox1->Selected[i]==true)
      {
       ListBox1->Items->Delete(i);
      }
     }
    }
    }
    


  • Hallo

    2. Ja es geht SCHON, aber wie vorher.
    Alles was über dem markierten Eintrag ist, wird auch mitgelöscht.

    Kann gar nicht sein. Der Quellcode von mir löscht maximal 1 Eintrag.

    Da muss man glaub ich die for-Schleife anders machen..

    Wenn du den ausgewählten Eintrag löschen willst brauchst du keine Schleife.

    bis bald
    akari



  • akari schrieb:

    Kann gar nicht sein. Der Quellcode von mir löscht maximal 1 Eintrag.

    Wenn du den ausgewählten Eintrag löschen willst brauchst du keine Schleife.

    ich wollte ja nicht nur EINEN eintrag löschen sondern mehrere markierte



  • Hallo

    Anfangspost schrieb:

    2. Ich möchte einen markierten Eintrag per ENTFERNEN-Taste löschen!

    🙄
    Dann solltest du deine Fragen auch dementsprechend stellen!
    Und wenn du jetzt noch sagst nach welchem Muster die zu löschenden Einträge gefunden werden sollen könnte dir auch jemand helfen.

    bis bald
    akari



  • sry 😞


Anmelden zum Antworten