ListBox1->Items[0] Click Event zuweisen?



  • probieren!!!

    Die 2. würde ich schätzen 🤡

    Grüsse 👍

    *edit*
    ok also
    Geh mit der maus auf ListBox1 und drück F1, dann kannst du es heraus bekommen.

    AnsiString a=ListBox1->Items->Strings[2];
    


  • hi,

    warum messagebox? mach doch ein formular mit deinen daten. das öffnest du dann.

    Form2->ShowModal();
    


  • so geht das also :p

    if(ListBox1->ItemIndex == 2)
        {
           Edit1->Text = ListBox1->Items->operator [](2) ;
    
        }
    

    danke schön
    naja in der massagebox nicht hmm



  • hmmm

    ich bekomm den text in ein edit feld, aber ich will eigentlich das ganze damit kombinieren...

    if(ListBox1->ItemIndex == 1)
        {
         AnsiString a=ListBox1->Items->Strings[1];
           TForm2* a = new TForm2(Application);
    a->Show();
    }
    

    das geht nun irgendwie garnicht 😕 👎[/code]



  • ich weis ja auch nicht, aber so macht der das 🤡

    if(ListBox1->ItemIndex == 1)
        {
        AnsiString a1 =ListBox1->Items->Strings[1];
           TForm2* a = new TForm2(Application);
    a->Show();
    a->Caption ="Konfiguration von "+ a1;
    

    thx 🙄



  • Hi,
    du möchtest also ein Formular dynamisch zur Laufzeit erhalten, dass
    ein Edit-Feld hat, in dem ListBox1->Items->String[0] ausgegeben wird?
    Dazu musst du erst auf dem TForm2 ein Edit-Komponente ablegen (mit Formulardisigner wie gewohnt).
    Den Namen merken sagen wir mal Edit1.
    Eventuell muss du TForm2 aus der projekt.cpp herausnehmen, damit
    es dynamisch erzeugt werden kann. (ist aber nicht sicher erst mal nicht
    raus kommentieren aus projekt.cpp)
    Mein Vorschlag:::

    if(ListBox1->ItemIndex==1)
    {
     TForm2 *form2=new TForm2(this);
     form2->Edit1->Text=ListBox1->Items->Strings[0]; 
     form2->ShowModal(); //..Modal(), damit den Programm auf schliesen wartet...
     delete form2;
    }
    
    //Bei diesem könnte der Hund hier begraben sein c_str()
    AnsiString a=ListBox1->Items->Strings[0];
    Application->MessageBoxA(a.c_str(),"",MB_OK);
    

    oder? 😕

    Grüsse



  • ja zb das edit1 oder form2->caption den inhalt von ListBox->Item->Text erhält.

    schöner were es wen es noch möglich were die form selbst mit diesem namen zur laufzeit zu erstellen, hab schon rumprobiert aber bekomme es nicht hin 😞

    danke für die hilfe, kann ja schon so wie es ist viel anfangen 🙂



  • Hallo

    schöner were es wen es noch möglich were die form selbst mit diesem namen zur laufzeit zu erstellen

    Was ist für dich den der Name einer Form? Sowohl die Eigenschaften Name als auch Caption sind auch zur Laufzeit änderbar.

    Du darfst allerdings nicht den Namen eines Pointers (Form2->...) mit dem Wert einer Instanz (Form2->Name = "Form2") verwechseln.

    bis bald
    akari



  • also so kann ich das machen, das ist aber nicht ganz praktisch für den zugriff auf die neue instans der form 😞

    if(ListBox1->ItemIndex == 1)
        {
        AnsiString a1 =ListBox1->Items->Strings[1];
           TForm2* a = new TForm2(Application);
    a->Show();
    a->Caption ="Konfiguration von "+ a1;
    a->Name = a1;
    
    }
    

    umweiter auf die form zugreifen zu können muss ich aber immer noch mit a-> arbeiten.

    ? oder seh ich da was falsch?

    ich weis ja nicht was später noch kommen wird, ist ja erst mal ein grund gerüst, der idee 😃

    aber könnte mir vorstellen wenn, ich die erzeugte instans so nenen könte wie den item->text, daß ich später im programm besser mit umgehen kann oder drauf verweisen kann hmmm

    vielleicht brauch ich es auch garnicht🙄, würde mich schon interessieren wie ich den namen der instans a, mit einem edit->text oder item-text setzen könnte 😕

    thx



  • Hallo

    also so kann ich das machen, das ist aber nicht ganz praktisch für den zugriff auf die neue instans der form

    Was ist daran nicht praktisch?

    umweiter auf die form zugreifen zu können muss ich aber immer noch mit a-> arbeiten.

    Ja, um "von außen" auf eine Form-Instanz zuzugreifen must du immer einen Pointer benutzen. Der Pointer kann heißen wie er will, muß aber bekannt und gültig sein. Das ist ein allgemeines Prinzip und nicht Form-spezifisch.

    aber könnte mir vorstellen wenn, ich die erzeugte instans so nenen könte wie den item->text, daß ich später im programm besser mit umgehen kann oder drauf verweisen kann hmmm
    

    Du kannst es nennen wie du willst, siehe die Eigenschaften Name und Caption. Zum Laufzeitzugriff brachst du aber immer einen Pointer, der grundsätzlich von den Belegungen der Eigenschaften unabhängig ist.

    vielleicht brauch ich es auch garnicht🙄, würde mich schon interessieren wie ich den namen der instans a, mit einem edit->text oder item-text setzen könnte

    Damit meinst du wohl, das der Pointer wie die Auswahl/Eingabe heißen soll. Das geht natürlich nicht, denn in C++ sind Variablennamen zur Compiletime fest und zur Laufzeit gar nicht mehr vorhanden.

    bis bald
    akari



  • danke schön für die erklärung und hilfe 🙂

    das läuft so weit ganz gut, hänge hier dran grade.....

    also am anfang wird gefragt wieviele PC es den gibt

    und hier macht er was komisches was ich nicht ganz verstehe

    for(int i=1;i<=StrToInt(Edit3->Text);++i) 
     {
     Form1->ListBox1->Items->Add("PC"+i);
     }
    

    anstatt die zahl 1 usw. hinter PC, löscht er mir vortlaufend den ersten bustaben weg 😞

    ich hab schon ein schlechtes gewissen weil ich euch mit solchen kleinigkeiten belästige 😞



  • Hallo

    int Gesamt = 0;
    try
    {
      Gesamt = StrToInt(Edit3->Text); // Vorher bestimmen mit Fehlerüberprüfung
    }
    catch(...)
    {
      Application->MessageBox("Keine gültige Zahl", "Eingabe" MB_OK);
    }
    
    for(int i=1;i<=Gesamt;++i)
    {
      Form1->ListBox1->Items->Add("PC"+ IntToStr(i)); // Zahl richtig konvertieren
    }
    

    Alternativ geht für den try/catch-Block einfacher auch

    int Gesamt = StrToIntDef(Edit3->Text, 0);
    

    bis bald
    akari



  • so glücklich bin!! 😃 👍

    danke schön


Anmelden zum Antworten