ListBox1->Items[0] Click Event zuweisen?
-
Abend,
ich habe da ein kleines Problemchen

also die Lösung die ich gewählt habe, für mein Vorhaben ist unpraktisch geworden!
Ich habe für Verschiedene PCs, Konfiguration und Software Stände, hinter Buttons versteckt.
Also, PC1 Konfiguration ist unter Button1, PC2 unter Button2..........
Jetzt ist das Ganze nicht nur sehr gross als Form wen man Viele Buttos hat Sieht auch nicht grade berauschend aus.
Habe mir gedacht daß ich die einzelnen PCs in einer ListBox unterbringen kann und dort auf ein Click Event, ein bestimmtes Item öffnen.
Also die Daten des PCs, den ich angeklickt habe.
Die Frage ist, wie finde ich beim klicken auf die ListBox, welches Item ich geklickt habe

Für Tutorials und jede art Hilfe bin ich sehr dankbar
wünsche noch was
-
hi,
hast doch schon selber beantwortet. geht über items. der erste eintrag ist 0 der 2. dann halt 1 usw.
Beispiel:
if(ListBox1->ItemIndex == 1) // hier halt der 2. eintrag { Application->MessageBoxA("Hallo","",MB_OK); }
-
das klappt, freu

aber würde das hier noch in der art einbauen wollen....
if(ListBox1->ItemIndex == 2) { Application->MessageBoxA(ListBox1->ItemIndex[2]->Text,"",MB_OK); } oder if(ListBox1->ItemIndex == 2) { Application->MessageBoxA(ListBox1->Items[2],"",MB_OK); }das klappt aber nicht, warum?
wie greif man auf den eingetragenen text zu?
-
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 hmmmDu 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önnteDamit 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