| Autor |
Beitrag |
nooK!E
Hält's aus hier
Beiträge: 9
|
Verfasst: Fr 19.12.03 19:09
hallo!
ich habe folgendes problem, ich möchte aus einer TListBox abfragen, welches item markiert ist, um den entsprechenden eintrag x in ein Edit-Feld zu übernehmen.
ich weiß bisher nur, wie ich den eintrag an einer bestimmten stelle in das edit feld übernehmen kann (Edit1.Text:=Listbox1.Items [0]).
danke schon im voraus!
|
|
CenBells
      
Beiträge: 1547
Win 7
Delphi XE5 Pro
|
Verfasst: Fr 19.12.03 19:12
Hallo,
also, schau dir mal in der hilfe die eigenschaft TCustomListBox.Selected an. Das sollte dir eigentlich weiterhelfen.
Gruß und frohes Fest
Ken
_________________ Eine Klasse beschreibt die Struktur und das Verhalten einer Menge gleichartiger Objekte.
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Fr 19.12.03 19:17
Hallo und herzlich Willkommen im DF!
Wenn bei der ListBox MultiSelect=False ist, dann wird Dir auch die Eigenschaft ItemIndex sicher weiterhelfen!
MfG
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
nooK!E 
Hält's aus hier
Beiträge: 9
|
Verfasst: Fr 19.12.03 19:27
danke schon mal, ich hab mir die hilfethemen mal durchgelesen, aber verstanden hab ich sie nicht so ganz... (ich programmier noch nicht lange mit delphi)
könnt ihr mir mal konkret das entsprechende stück im quelltext schreiben bitte?
also ich habe eine ListBox1 und eine ListBox2 und ein Edit1 und ein Edit2. aus ListBox1 soll ausgelesen welcher eintrag markiert ist und der eintrag dann in Edit1 übernommen werden und der eintrag in der ListBox2 mit der entsprechenden nummer soll in Edit2 stehen.
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Fr 19.12.03 19:50
Hallo!
Der Lerneffekt, wenn man etwas selbst programmiert, ist sehr viel höher, als wenn man etwas vorgesetzt bekommt. Daher hier erst einmal nur eine Erklärung:
- zu ItemIndex: die Items in einer ListBox sind durchnummeriert. Von 0 bis Anzahl-1. ItemIndex gibt die Nummer des markierten Items zurück. Dies macht nur Sinn, wenn die ListBox so eingestellt ist, dass nur ein Item markiert sein kann: MultiSelect=False
- zu Selected: dies ist ein Array (wenn nicht bekannt, siehe bei den Tutorials hier im Forum), welches genauso viele Elemente hat, wie die ListBox Einträge hat. Selected speichert, welche Einträge der ListBox markiert sind. Ist z.B. das 3. Item markiert, dann gilt: Selected[2] = true (da die Nummerierung bei 0 beginnt).
Mfg
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
nooK!E 
Hält's aus hier
Beiträge: 9
|
Verfasst: Fr 19.12.03 20:30
wenn ich jetzt selected mit einer variable belege (muss ich das überhaupt machen??)
Listbox1.Selected [m];
wie kann ich die variable dann zur ausgabe in einem edit feld verwenden?
oder ist der ansatz komplett falsch?
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Fr 19.12.03 20:50
Hallo!
Selected ist bereits deklariert. Aber der Ansatz mit dem Selected[m] ist schon richtig. Du könntest z.B. so abfragen, ob das Item mit Index m markiert ist.
Delphi-Quelltext 1:
| if listbox1.selected[m] then ShowMessage('Markiert!'); |
oder Du kannst es dann in ein Edit schreiben
Delphi-Quelltext 1:
| if listbox1.selected[m] then edit1.text := listbox1.items[m] |
Aber mal 'ne andere Frage: wenn Du ein Edit-Feld verwendest, dann kann man in Deiner Listbox doch sowieso nur ein Item markieren (mehr geht in ein Edit ja nicht rein). Dann versuch es doch mal mit ItemIndex. Das ist in dem Fall viel besser.
MfG
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
nooK!E 
Hält's aus hier
Beiträge: 9
|
Verfasst: Fr 19.12.03 20:55
wie funktioniert das denn genau damit?
|
|
Raphael O.
      
Beiträge: 1596
VS 2013
|
Verfasst: Fr 19.12.03 20:57
Delphi-Quelltext 1:
| showmessage(listbox1.items[listbox1.itemindex]); |
|
|
nooK!E 
Hält's aus hier
Beiträge: 9
|
Verfasst: Fr 19.12.03 21:05
supi, vielen vielen dank, damit klappts!
|
|
nooK!E 
Hält's aus hier
Beiträge: 9
|
Verfasst: Fr 19.12.03 22:46
Hab jetzt noch ein Problem... nämlich mit einem button der den markierten eintrag in der ListBox1 löscht und den eintrag mit der entsprechenden nummer in der ListBox2. mit folgendem code funktioniert das irgendwie nicht:
Delphi-Quelltext 1: 2: 3: 4: 5:
| procedure TForm1.Button2Click(Sender: TObject); begin ListBox1.Items.Delete(listbox1.ItemIndex); ListBox2.Items.Delete(Listbox1.ItemIndex); end; |
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Fr 19.12.03 22:50
Es macht wenig Sinn, dass Du in ListBox2 den Eintrag löschst, der die Nummer des in ListBox1 markierten Eintrags hat.
(Ich habe nicht den Eindruck, dass Du Dich wirklich mit dem Ganzen beschäftigt hast.)
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
nooK!E 
Hält's aus hier
Beiträge: 9
|
Verfasst: Fr 19.12.03 22:52
doch, genau das will ich damit bezwecken.
die zweite listbox ist für den benutzer unsichtbar und deswegen kann er nicht separat einträge daraus löschen. die nicht mehr gebrauchten einträge sollen aber trotzdem gelöscht werden, deswegen hab ich das so versucht...
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Fr 19.12.03 22:58
Okay. Dann überleg' dochmal:
Du möchtest, dass wenn in LB1 der Eintrag Nr.5 markiert ist, in beiden LBs der Eintrag mit Nummer 5 gelöscht wird.
Nun löschst Du aber den Eintrag zuerst in LB1 und fragst hinterher nochmal den Eintrag mit ItemIndex ab (wenn Du ihn in LB2 löschen willst). Klar, dass dann nicht mehr der richtige Eintrag markiert ist: er ist gar nicht mehr da.
//edit: eine unsichtbare LB ist nur selten sinnvoll. Würde es nicht auch eine StringList tun?
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
nooK!E 
Hält's aus hier
Beiträge: 9
|
Verfasst: Fr 19.12.03 23:00
stimmt... klingt logisc  h danke.
wie gesagt, ich bin noch anfänger und es fällt mir manchmal schwer auf die richtige reihenfolge zu achten... 
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Fr 19.12.03 23:24
Kein Problem. Mal über 'ne StringList nachgedacht?
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
nooK!E 
Hält's aus hier
Beiträge: 9
|
Verfasst: Sa 20.12.03 00:18
würde sicherlich auch gehen, aber ich habs jetzt schon mit der versteckten zweiten listbox gemacht und das funktioniert jetzt auch problemlos.
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Sa 20.12.03 11:43
Das ist aber sehr ... unelegant. Eine StringList könntest Du doch im Prinzip genauso nutzen. Und schöner wäre es allemal.
Außerdem sollte man mit solchen Sachen, grafische Komponenten für nicht-grafischen Dinge zu entfremden, gar nicht erst anfangen. Hinterher gewöhnt man sich dran.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
kab
Hält's aus hier
Beiträge: 4
|
Verfasst: Di 23.11.04 11:08
Dieser Treat hat mir soweit geholfen das ich diesen Code entwickelt habe.
ieleicht bringt es Jemanden mal weiter
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure TForm1.Button1Click(Sender: TObject); var i:word; begin For i := 0 To UserListe.Items.Count-1 Do if UserListe.selected[i] then ShowMessage(UserListe.Items.Strings[i]); end; |
|
|