Jeg tænkte mere på bare en linje
det jeg har lavet er en combobox og en knap
når man skriver et navn i comboboxen og trykker på knappen kommer det ind i 123.abc og så loader comboboxen filen igen så den står der men hvis nu jeg ville slette bare det navn der er markeret hvad så
Hej,
Hvorfor ikke bruge en TStringList???
Når du skal gemme bruger du :
Liste.SaveToFile('abc.txt');
og når du henter bruger du:
Liste.LoadFromFile('abc.txt');
Her er et program som indeholder 2 knapper (slet og tilføj) og en combobox.
Programmer henter filen abc.txt ved opstart og gemmer den igen ved ned lukning.
Alle linier i filen holdes i en TStringList som sørgerfor at vedlige holde comboxen's elementer.
Følgende funktioner bruge til at holde styr på dine data:
procedure SaveCombo;
procedure LoadCombo;
procedure AddToCombo(AStr : String);
procedure RemoveFromCombo(AStr : String);
procedure RefreshCombo;
Du skal oprette en form (med navnet Form1) og sætte en combobox ind (med navnet ComboBox1).
Der efter skal du sætte 2 knapper ind (med navnene btnAdd og btnDelete).
Nu skal du sætte følgende event:
btnAdd -> OnClick = btnAddClick
btnDelete -> OnClick = btnDeleteClick
Form1 -> OnCreate = FormCreate
Form1 -> OnDestroy = FormDestroy
Her er koden:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
ComboBox1: TComboBox;
btnAdd: TButton;
btnDelete: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btnAddClick(Sender: TObject);
procedure btnDeleteClick(Sender: TObject);
private
FItems : TStringList;
procedure SaveCombo;
procedure LoadCombo;
procedure AddToCombo(AStr : String);
procedure RemoveFromCombo(AStr : String);
procedure RefreshCombo;
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
FItems := TStringList.Create;
LoadCombo;
RefreshCombo;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
SaveCombo;
FItems.Free;
end;
procedure TForm1.SaveCombo;
begin
FItems.SaveToFile('abc.txt');
end;
procedure TForm1.LoadCombo;
begin
if (FileExists('abc.txt')) then
FItems.LoadFromFile('abc.txt')
else
FItems.Clear;
end;
procedure TForm1.AddToCombo(AStr : String);
var
I : Integer;
begin
for I := 0 to FItems.Count-1 do
begin
if (FItems.Strings[I] = AStr) then
Exit; // Skip opdatering hvis data allerede findes.
end;
FItems.Add(AStr);
end;
procedure TForm1.RemoveFromCombo(AStr : String);
var
I : Integer;
begin
for I := 0 to FItems.Count-1 do
begin
if (FItems.Strings[I] = AStr) then
begin // okay, vi har fundet det index vi skal slette.
FItems.Delete(I);
Exit; // Hop ud, da vi har gjort hvad vi skulle.
end;
end;
end;
procedure TForm1.btnAddClick(Sender: TObject);
begin
if (Combobox1.ItemIndex = -1) then
begin // vi opdatere kun hvis det er en ny tekst
AddToCombo(Combobox1.Text);
RefreshCombo;
end;
end;
procedure TForm1.btnDeleteClick(Sender: TObject);
begin
if (Combobox1.ItemIndex <> -1) then
begin // vi sletter kun hvis der er selected en tekst
RemoveFromCombo(Combobox1.Text);
RefreshCombo;
Combobox1.Text := '';
end;
end;
procedure TForm1.RefreshCombo;
var
I : Integer;
begin
I := Combobox1.ItemIndex; // husk gamle index (som er i fokus).
ComboBox1.Items.BeginUpdate; // lås comboboxen så vi kan opdatere hurtigere
try
ComboBox1.Items.Clear; // slet alle elementer.
ComboBox1.Items.AddStrings(FItems); // sæt alle elementerne fra FItems to comboboxen.
finally
ComboBox1.Items.EndUpdate; // åben comboboxen så den kan bruges igen.
end;
end;
end.
Håber det hjælper dig...
Hvis du har nogle spørgsmål så fyr løs
Mvh
Michael.