![]() |
editbox Text aus Listbox beziehen
Hi ich habe ein Programm geschrieben, was beim starten eine listbox aus einer datei lädt und den darin enthaltenen Text in eine Editbox übergibt.
Beim starten des Programms erhalte ich aber den Fehler dass der Listenindex überschritten wird. Ich kann mir das gar nicht erklären und bitte um Hilfe^^
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, XPMan; type TForm1 = class(TForm) ListBox1: TListBox; Edit1: TEdit; Button1: TButton; XPManifest1: TXPManifest; Button2: TButton; Label1: TLabel; Button3: TButton; Label2: TLabel; Edit2: TEdit; ListBox2: TListBox; procedure FormDestroy(Sender: TObject); procedure Edit2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; type feldtyp = array[0..5000] of integer; var Form1: TForm1; f:feldtyp; index:integer; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin index:=0; if fileexists(edit2.text+'.array') then listbox1.items.loadfromfile(edit2.text+'.array'); if fileexists('settings.ini') then listbox2.items.loadfromfile('settings.ini'); edit2.Text:=listbox2.items.strings[listbox2.itemindex]; end; procedure TForm1.Button1Click(Sender: TObject); begin f[index]:=strtoint(edit1.text); listbox1.items.add(edit1.Text); edit1.text:=''; label1.caption:='Bis jetzt wurden '+inttostr(index+1)+' Zahlen aufgenommen.'; index:=index+1; end; procedure TForm1.Button2Click(Sender: TObject); var a,i,j:integer; begin for i:=1 to index do begin for j:= index downto i do begin if f[j] < f[j-1] then begin a := f[j-1]; f[j-1] :=f[j]; f[j] := a; end; end; end; listbox1.Items.clear; for i:=1 to index do begin listbox1.items.add(inttostr(f[i])); end; end; procedure TForm1.Button3Click(Sender: TObject); begin listbox1.items.Clear; label1.caption:='Bis jetzt wurden 0 Zahlen aufgenommen.'; index:=0; end; procedure TForm1.Edit2Click(Sender: TObject); begin edit2.Text:=''; end; procedure TForm1.FormDestroy(Sender: TObject); begin listbox1.Items.savetofile(edit2.Text+'.array'); listbox2.Items.clear; listbox2.Items.add(edit2.Text); listbox2.items.SaveToFile('settings.ini'); end; end. |
Re: editbox Text aus Listbox beziehen
Hallo und Willkommen in der DP :dp: ,
versuch es mal so:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin index:=0; if fileexists(edit2.text+'.array') then listbox1.items.loadfromfile(edit2.text+'.array'); if fileexists('settings.ini') then begin listbox2.items.loadfromfile('settings.ini'); if Listbox2.Items.Count > 0 then edit2.Text:=listbox2.items[0]; end; end; |
Re: editbox Text aus Listbox beziehen
Vielen dank für deine Hilfe^^ aber das Probleme habe ich schon gelöst, war ja auch nicht so schwer. Dafür habe ich jetzt ein neues.
Ich möchte ein Feld aus einer Datei laden. Das Feld soll in der Listbox erscheinen und auch im Array abgespeichert werden, sodass man damit arbeiten kann. Sprich das Feld Sortieren. Wenn ich das Feld lade dann wird es in der Listbox korrekt angezeigt aber im Array nicht richtig abgespeichert.
Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var i:integer; begin index:=1; opendialog1.execute; listbox1.Items.LoadFromFile(opendialog1.FileName); for i:=1 to listbox1.items.count do begin f[i]:=strtoint(listbox1.items.Strings[i-1]); end; label1.caption:='Bis jetzt wurden '+inttostr(listbox1.Items.count)+ ' Zahlen aufgenommen.'; end; |
Re: editbox Text aus Listbox beziehen
Hallo,
wie ist denn f definiert ? Wie sieht f nach der Ziele label1.caption aus ? Falls es ein array of String ist, fehlt ein SetLength. F5, F7, F8 kennst du ? Zur Einrückunh.
Delphi-Quellcode:
Normlerweise schreibt man immer := 0 to Count-1
for i:=0 to listbox1.items.count-1 do
begin f[i+1]:=strtoint(listbox1.items.Strings[i]); end; Heiko |
Re: editbox Text aus Listbox beziehen
Drei Dinge hab ich nicht ganz verstanden:
- Du solltest prüfen, ob der Opendialog auch ausgeführt und nicht abgebrochen wurde:
Delphi-Quellcode:
- die Listbox wird sortiert (sorted := true), aber das Array nicht? Dann musst Du Dir eine eigene Sortierroutine schreiben.
if opendialog1.execute then...
- Nimm doch besser eine TList statt des Arrays, da gibt es bereits eine Sort-Methode. Außerdem bist Du in der Größe nicht so eingeschränkt wie bei einem statischen Array. |
Re: editbox Text aus Listbox beziehen
Ich habe eine eigene Sortierroutine^^
Mh ich denke ich werde mal den kompletten Quellcode posten zum Besseren Verständnis.
Delphi-Quellcode:
Ich hoffe ihr könnt mir nun besser weiterhelfen.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, XPMan; type TForm1 = class(TForm) ListBox1: TListBox; Edit1: TEdit; Button1: TButton; XPManifest1: TXPManifest; Button2: TButton; Label1: TLabel; Button3: TButton; Label2: TLabel; Edit2: TEdit; ListBox2: TListBox; Button4: TButton; OpenDialog1: TOpenDialog; procedure Button4Click(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Edit2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; type feldtyp = array[0..5000] of integer; var Form1: TForm1; f:feldtyp; index:integer; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin index:=1; if fileexists('settings.ini') then begin listbox2.items.loadfromfile('settings.ini'); edit2.Text:=listbox2.items.strings[0]; end; if fileexists(edit2.text+'.array') then listbox1.items.loadfromfile(edit2.text+'.array'); label1.caption:='Bis jetzt wurden '+inttostr(listbox1.Items.count)+ ' Zahlen aufgenommen.'; end; procedure TForm1.Button1Click(Sender: TObject); begin f[index]:=strtoint(edit1.text); listbox1.items.add(edit1.Text); edit1.text:=''; label1.caption:='Bis jetzt wurden '+inttostr(listbox1.Items.count)+ ' Zahlen aufgenommen.'; index:=index+1; form1.caption:='Bubblesort - Zahlen aufnehmen'; end; procedure TForm1.Button2Click(Sender: TObject); var a,i,j:integer; begin for i:=1 to index-1 do begin for j:= index downto i do begin if f[j] < f[j-1] then begin a := f[j-1]; f[j-1] :=f[j]; f[j] := a; end; end; end; listbox1.Items.clear; for i:=2 to index do begin listbox1.items.add(inttostr(f[i])); end; form1.caption:='Bubblesort - Zahlen Sortiert'; label1.caption:='Bis jetzt wurden '+inttostr(listbox1.Items.count)+ ' Zahlen aufgenommen.'; end; procedure TForm1.Button3Click(Sender: TObject); begin listbox1.items.Clear; label1.caption:='Bis jetzt wurden '+inttostr(listbox1.Items.count)+ ' Zahlen aufgenommen.'; index:=1; form1.caption:='Bubblesort - Bereit'; end; procedure TForm1.Edit2Click(Sender: TObject); begin edit2.Text:=''; end; procedure TForm1.FormDestroy(Sender: TObject); begin listbox1.Items.savetofile(edit2.Text+'.array'); listbox2.Items.clear; listbox2.Items.add(edit2.Text); listbox2.items.SaveToFile('settings.ini'); end; procedure TForm1.Button4Click(Sender: TObject); var i:integer; begin index:=1; if opendialog1.execute then listbox1.Items.LoadFromFile(opendialog1.FileName); else begin opendialog1.execute; listbox1.Items.LoadFromFile(opendialog1.FileName); end; for i:=0 to listbox1.items.count-1 do begin f[i+1]:=strtoint(listbox1.items.Strings[i]); end; label1.caption:='Bis jetzt wurden '+inttostr(listbox1.Items.count)+ ' Zahlen aufgenommen.'; end; end. |
Re: editbox Text aus Listbox beziehen
Ich komm mit Deinem Index nicht klar, wenn ich ehrlich bin.
|
Re: editbox Text aus Listbox beziehen
die variable index ist das selbe wie listbox1.items.count nur halt von dem array^^
|
Re: editbox Text aus Listbox beziehen
Dein Array beginnt aber bei Index 0. Das erste Element wird somit nie angesprochen, wenn ich das richtig gesehen habe.
|
Re: editbox Text aus Listbox beziehen
stimmt aber ich denke nicht dass es daran liegt oder?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz