Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Frage zur Arbeit mit Combobox.
marcelrusi - Do 09.06.11 14:26
Titel: Frage zur Arbeit mit Combobox.
Hallo Leute,
Ich habe folgendes Problem:
Ich möchte bei Delphi ein Programm erstellen, bei dem man aus einer Combobox ( geht das ?? ) einen Begriff auswählt und eine Zahl angegeben bekommt.
Beispiel: Wenn ich 'Stein' auswähle kommt in ein Label die Zahl 1.
Kann mir bitte jemand erklären wie das geht ??
Moderiert von
Martok: Topic aus Sonstiges (Delphi) verschoben am Do 09.06.2011 um 14:51
Bergmann89 - Do 09.06.11 14:34
Hey,
mach dir ein Array mit den Zahlen die du ausgeben willst. In die ComboBox schreibst du in die "Items"-Eigenschaft die Wörter (in der gleichen Reihenfolge wie dazugehörigen Zahlen im Array. Dann brauchst du noch ein Label auf dem du die Zaheln ausgibst. Dann machst du einen DFoppelklick auf deine ComboBox, um so die OnChange-Methode zu erstellen, die wird aufgerufen, sobald due den Wert der Box änderst. In dieser Methode kannst du mit ComboBox.ItemIndex auf den Index des selektierten Items zugreifen. Mit diesem Index holst du deine Zahl aus dem Array und gibst sie auf dem Label aus.
MfG Bergmann.
zuma - Do 09.06.11 14:45
wozu noch extra ein Array ? in der ComboBox ist ja ne stringlist .... da kannste doch mit String und Object arbeiten?
Beim Reinfügen z.B.
String mit zugehöriger Zahl eintragen
Delphi-Quelltext
1:
| ComboBox.Items.AddObject('EinString', TObject(1)); |
auslesen (aktuelle pos)
Delphi-Quelltext
1: 2:
| EinString := ComboBox.Items.Strings[ComboBox.ItemIndex]; Zahl := Integer(ComboBox.Items.Objects[ComboBox.ItemIndex]); |
String zur Zahl geben
Delphi-Quelltext
1:
| EinString := ComboBox.Items.Strings[ComboBox.Items.IndexOfObject(TObject(1))]; |
marcelrusi - Do 09.06.11 14:56
Also mein Quelltext sieht bis jetzt so aus :
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.ComboBox1Change(Sender: TObject); begin ComboBox1.Items.AddObject ('Stein', TObject(1)); ComboBox1.Items.AddObject ('Gras', TObject(2)); ComboBox1.Items.AddObject ('Erde', TObject(3)); ComboBox1.Items.AddObject ('Cobblestone', TObject(4)); ComboBox1.Items.AddObject ('Holz', TObject(5)); ComboBox1.Items.AddObject ('Baum', TObject(6)); |
ist wahrscheinlich nicht richtig, damit die Begriffe 'Stein' etc. in der Combobox erscheinen....
wie funktioniert das richtig ?
sorry für mein Unverständniss, aber ich arbeite erst seit kurzen mit Delphi ;)
mvollmer - Do 09.06.11 15:03
So wie du es jetzt machst, werden beim ändern des ComboBox Items diese 6 Items hinzugefügt.
Nimm Sie dort raus und schreib sie in den FormCreate Methode.
Im OnChange Ereignis sollte nur das ändern des Labels drinstehen.
btw: sieht stark nach Minecraft aus^^
marcelrusi - Do 09.06.11 15:12
Ah ok und wo schreibe ich das :
1:EinString := ComboBox.Items.Strings[ComboBox.ItemIndex];
2:Zahl := Integer(ComboBox.Items.Objects[ComboBox.ItemIndex]);
und das :
1:EinString := ComboBox.Items.Strings[ComboBox.Items.IndexOfObject(TObject(1))];
rein ?
Mit Minecraft hast du recht ;) :P
whitef - Do 09.06.11 15:50
wie wärs damit?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.FormCreate(Sender: TObject); begin ComboBox1.Items.Add('Stein'); ComboBox1.Items.Add('Gras'); ComboBox1.Items.Add('Erde'); ComboBox1.Items.Add('Cobblestone'); ComboBox1.Items.Add('Holz'); ComboBox1.Items.Add('Baum'); end;
procedure TForm1.ComboBox1Change(Sender: TObject); begin label1.Caption := InttoStr(ComboBox1.ItemIndex + 1); if ComboBox1.ItemIndex + 1 = 0 then label1.Caption := 'Bitte wählen...'; end; |
marcelrusi - Do 09.06.11 15:56
Perfekt , Danke ;)
Hats mir sehr geholfen ;))
Bergmann89 - Do 09.06.11 16:47
Hey,
dazu müssen die Zahlen zu den Strings aber aufsteigend sortiert und lückenlos sein. Und da bei Minecraft manche IDs nich belegt sind wird er da früher oder später wieder Probleme haben. Deshalb ist die Verknüpfung mit den Objekten hier die richtige Lösung. Dein Code war ja auch richtig, nur an der falschen Stelle!
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TForm1.FormCreate(Sender: TObject); begin ComboBox1.Items.AddObject('Stein', TObject(1)); ComboBox1.Items.AddObject('Gras', TObject(2)); ComboBox1.Items.AddObject('Erde', TObject(3)); ComboBox1.Items.AddObject('Cobblestone', TObject(4)); ComboBox1.Items.AddObject('Holz', TObject(5)); ComboBox1.Items.AddObject('Baum', TObject(6)); end;
procedure TForm1.ComboBox1Change(Sender: TObject); var ID: Integer; begin ID := ComboBox.ItemIndex; if (ID >= 0) and (ID < ComboBox.Items.Count) then Label1.Caption := IntToStr(Integer(ComboBox.Items.Objects[ID])) else Label1.Caption := 'Kein Item gewählt!'; end; |
whitef hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4:
| label1.Caption := InttoStr(ComboBox1.ItemIndex + 1); if ComboBox1.ItemIndex + 1 = 0 then label1.Caption := 'Bitte wählen...'; end; | |
Warum erst rechnen? Prüf doch gleich auf -1.
€: vlt hilft dir
DAS [
http://www.christian-stelzmann.de/artikel/crashkurs.htm] auch weiter. Denn so wie es aussieht hast du große Probleme Code selber zu schreiben, und einfach Copy&Paste is nich Sinn der Sache. Vorallem nich wenn man den kopierten Code nicht versteht un dann irgendwo im Programm einfügt und sich wundert warum nix geht ;)
MfG Bergmann.
whitef - Do 09.06.11 19:06
hast recht, war wohl ein wenig zu schnell^^
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!