Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Listbox Item überschreiben (https://www.delphipraxis.net/103749-listbox-item-ueberschreiben.html)

Stern 21. Nov 2007 10:28


Listbox Item überschreiben
 
Hallo zusammen,

ich habe eine Frage zum Ändern eines bestimmmten Eintrags in einer ListBox.
Ich habe im Prinzip 2 Textdateien, die beide eingelesen werden und deren Inhalte jeweils in einer Listbox
ausgegeben werden. Beide Dateien enthalten die gleiche Anzahl an zeilen!

Wenn ich nun in der ersten Listbox ein Element auswähle, wird das entsprechende Element (mit dem gleichen Index)
der zweiten Listbox in einem Edit angezeigt. nun kommts...

Der Benutzer soll nun diesen Eintrag ändern können und über einen Button Speichern die Zeile in der Datei ÜBERSCHRIEBEN werden.
Bis jetzt bekomm ich es immer nur hin, dass er den Text am ENDE oder am ANFANG einfügt, aber icht überschreibt.
Kann mit da jemand einen Tipp geben? Ich steh da wohl gerade ziemlich auf dem Schlauch...

Liebe Grüße
Steffi

PS: Das Edit fülle ich so:
Delphi-Quellcode:
procedure TForm1.ListBox1Click(Sender: TObject);
var
  i: Integer;
begin
       for i := 0 to ListBox1.Items.Count -1 do
       begin
            if ListBox1.Selected[i] then
            Memo1.text := ListBox2.Items.Strings[i];
            end;
       end;

mkinzler 21. Nov 2007 10:32

Re: Listbox Item überschreiben
 
Dreh doch die Zuweisung einfach um:
Delphi-Quellcode:
ListBox2.Items.Strings[<index>] := Memo1.Text;

DeddyH 21. Nov 2007 10:33

Re: Listbox Item überschreiben
 
Versuch es mal so:
Delphi-Quellcode:
procedure TForm1.ListBox1Click(Sender: TObject);
var
  i: Integer;
begin
       for i := 0 to ListBox1.Items.Count -1 do
       begin
            if ListBox1.Selected[i] then
            Memo1.Lines[i] := ListBox2.Items[i];
            end;
       end;

Deep-Sea 21. Nov 2007 10:34

Re: Listbox Item überschreiben
 
Zitat:

Zitat von Stern
Ich habe im Prinzip 2 Textdateien, die beide eingelesen werden und deren Inhalte jeweils in einer Listbox
ausgegeben werden. Beide Dateien enthalten die gleiche Anzahl an zeilen!

Wenn ich nun in der ersten Listbox ein Element auswähle, wird das entsprechende Element (mit dem gleichen Index)
der zweiten Listbox [...]

Hört sich wieder einmal so an, als sei eine TListView besser dafür geeignet ...

Deep-Sea 21. Nov 2007 10:54

Re: Listbox Item überschreiben
 
Zitat:

Zitat von Stern
[...] wird das entsprechende Element (mit dem gleichen Index)
der zweiten Listbox in einem Edit angezeigt.

Zitat:

Zitat von Stern
Memo1.text := ListBox2.Items.Strings[i];

Ich dachte es handelt sich um ein Edit und kein Memo?

Zitat:

Zitat von mkinzler
Delphi-Quellcode:
ListBox2.Items.Strings[<index>] := Memo1.Text;

Etwas ungünstig oder? Ein Memo kann nun mal mehrere Zeilen beinhalten, eine einzige Zeile dagegen nicht, sonst wäre es ja auch keine Zeile mehr :P ...

Stern 21. Nov 2007 11:13

Re: Listbox Item überschreiben
 
Oh...
Sorry, da habe ich mich wohl vertan. Ich benutze ein edit. Kein Memo.
Hast du mir vielleicht noch einen Tipp, wie ich die Zeile dann überschreiben kann?

Liebe Grüße
Steffi

mkinzler 21. Nov 2007 11:15

Re: Listbox Item überschreiben
 
Delphi-Quellcode:
ListBox2.Items.Strings[<index>] := Edit.Text;

Stern 21. Nov 2007 11:27

Re: Listbox Item überschreiben
 
@mkinzler: danke für deine Antwort. Joa, dass hab ich schon so drinne

Zitat:

ListBox2.Items.Strings[<index>] := Edit.Text;
Allerdings hab ich nun ja das problem, dass ich momentan nicht weiß, wie ich den richtigen Index bekomme.
Wenn ich das wie oben verwendet, wird der geänderte Eintrag an die erste Zeile geschrieben.
Aber ich möchte ja den ausgewählten Eintrag, der ja vielleicht auch in der 10. Zeile steht überschreiben.
Ich muss sagen, dass ich erst seit ein paar Tagen mit Delphi "experimentiere"... :oops:

Also kann mir jemand nen Tipp geben, wie ich an den richtigen Index komme?

Liebe Grüße
Steffi

PS: Hier nochmal die wichtigen Codeteile:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
F:TextFile;
s:string;
begin

     if OpenDialog1.Execute then
     begin
          ListBox1.Clear;
          AssignFile(F, OpenDialog1.FileName);
          try
             Reset(F);
          except
                ShowMessage('Datei konnte nicht geöffnet werden');
                exit;
          end;

          if IOResult <> 0 then
          exit;

          while not EoF(F) do
          begin
          ReadLn(F,s);
          ListBox1.Items.Add(s);
          end;
     CloseFile(F);
    end;
  end;

procedure TForm1.ListBox1Click(Sender: TObject);
var
  i: Integer;
begin
       for i := 0 to ListBox1.Items.Count -1 do
       begin
            if ListBox1.Selected[i] then
            Edit1.text := ListBox2.Items.Strings[i];
            end;
       end;
procedure TForm1.Button3Click(Sender: TObject);

var
F:TextFile;
s: string;

begin
      if OpenDialog2.Execute then
     begin
          ListBox2.Clear;
          AssignFile(F, OpenDialog2.FileName);
          try
             Reset(F);
          except
                ShowMessage('Datei konnte nicht geöffnet werden');
                exit;
          end;

          if IOResult <> 0 then
          exit;

          while not EoF(F) do
          begin
          ReadLn(F,s);
          ListBox2.Items.Add(s);
          end;
     CloseFile(F);
    end;
end;
procedure TForm1.Button2Click(Sender: TObject);

var i: integer;
begin
     ListBox2.Items.Strings[i] := Edit1.Text;
     ListBox2.Update;
end;

bitsetter 21. Nov 2007 11:32

Re: Listbox Item überschreiben
 
Hallo,

meinst du etwa ListBox2.ItemIndex?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  SList: TStringList;
  Datei: AnsiString;
begin
  Datei:= 'C:\meineDatei.txt';
  if FileExists(Datei) then
  begin
    SList:= TStringList.Create;
    try
      SList.LoadFromFile(Datei);
      if ListBox2.ItemIndex >= 0 then
      begin
        SList.Strings[ListBox2.ItemIndex]:= Edit1.Text;
        SList.SaveToFile(Datei);
      end;
    finally
      SList.Free;
    end;
  end;
end;

Deep-Sea 21. Nov 2007 11:32

Re: Listbox Item überschreiben
 
Zitat:

Zitat von Stern
Allerdings hab ich nun ja das problem, dass ich momentan nicht weiß, wie ich den richtigen Index bekomme.
Wenn ich das wie oben verwendet, wird der geänderte Eintrag an die erste Zeile geschrieben.
Aber ich möchte ja den ausgewählten Eintrag, der ja vielleicht auch in der 10. Zeile steht überschreiben.

TListBox.ItemIndex

Stern 21. Nov 2007 12:01

Re: Listbox Item überschreiben
 
Entschuldigt bitte, wenn ich mich so doof anstelle. Aber jetzt blick ich es wirklich nich mehr... :oops:
Wenn ich das ganze mit ListBox1.ItemIndex zurückschreibe bekomm ich es an das Ende der datei und mit meiner Version von oben an das Ende. Aber ich schaff es nicht mir den Index zu merken und dann beim überschreiben wieder einzusetzen...

Kann mir vielleicht nochmal jemand kurz an meinem Beispiel zeigen, wie ich das hinbekommen könnte?

Liebe Grüße
Steffi

Deep-Sea 21. Nov 2007 12:10

Re: Listbox Item überschreiben
 
Zitat:

Zitat von Stern
Entschuldigt bitte, wenn ich mich so doof anstelle. Aber jetzt blick ich es wirklich nich mehr... :oops:
Wenn ich das ganze mit ListBox1.ItemIndex zurückschreibe bekomm ich es an das Ende der datei und mit meiner Version von oben an das Ende. Aber ich schaff es nicht mir den Index zu merken und dann beim überschreiben wieder einzusetzen...

Kann mir vielleicht nochmal jemand kurz an meinem Beispiel zeigen, wie ich das hinbekommen könnte?

Liebe Grüße
Steffi

Delphi-Quellcode:
procedure TForm1.ListBox1Click(Sender: TObject);
begin
  If ListBox1.ItemIndex > -1 then Edit1.Text := ListBox2.Items[ListBox1.ItemIndex];
end;
Soweit war es ja klar ... oder?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  If ListBox1.ItemIndex > -1 then ListBox2.Items[ListBox1.ItemIndex] := Edit1.Text;
end;
Und anders rum sollte das auch gehen ;)

Stern 21. Nov 2007 12:17

Re: Listbox Item überschreiben
 
OHHHHHH MEEEEIIIIN GOOTTTT... :oops: :wall: :oops:
Wie blöde kann man sich den anstellen? Vielen lieben Dank für eure Ausführliche Hilfe...
Ihr seid der Hammer :kiss:

Liebe Grüße
Steffi


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:48 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