procedura usuwająca wpisy w wielu ListViewach

0

hejka

zrobilem na podstawie pewnej ksiazki programik ,,filmoteka'' jest to baza danych przechowywująca nazwy filmow

na formie mam dwa przyciski (jeden dodaje a drugi usuwa rekordy) pod tym mam notebooka z trzema strona i na kazdej z nich jest podobny list view

w przycisku usuwającym dany rekord jest taki kod:

procedure TMainForm.Remove1;
var
  F : TAddressFile;
  Rec : TAddress;
  i : Integer;
begin
  AssignFile(F, 'filmy.silver');
  try
    Rewrite(F);  // utworzenie pliku i skasowanie poprzedniej zawartości

    for I := 0 to lvFilm.Items.Count -1 do
    begin
    { jeżeli wykonywana iteracja nie ma numeru takiego samego jak zaznaczony element }
      if I <> lvFilm.Selected.Index then
      begin
      { dodaj zawartość z kolnego elementu do pliku }
        Rec.Title := lvFilm.Items[i].Caption;
        Rec.Nosnik := lvFilm.Items[i].SubItems[0];
        Rec.Ilosc := StrToInt(lvFilm.Items[i].SubItems[1]);
        Write(F, Rec);
      end;
    end;
  finally
    CloseFile(F);
    ReadFile1; // odśwież zawartość komponentu
  end;
end;

wszystko dziala ale przestaje dzialac gdy do buttona dodaje jeszcze takie dwie procedury ale ze zmienionymi nazwami listviewow.

procedure TMainForm.btnRemoveClick(Sender: TObject);
begin
  Remove1;
  Remove2;
  Remove3;
end;

uruchamiam program i dodaje po pare rekordow do kazdego listviewa potem zaznaczam rekord do usuniecia naciskam przycisk i wyskakują takie dwa komunikaty : dlaczego pomozcie!!
user image
user image

0

co sie dzieje juz dwa razy pisalem o pomoc a tu odpowiedzi w tym watku sie kasuja

0

Hej

A takie cosik by nie pomogło ?

{przykładowo zaznaczyłeś coś do usunięcia na pierwszej liście
to  pobierz zaznaczony wpis}
tekst:= ListView1.Selected.Caption;
//i wywołaj procedurę usuwania
UsunWpis(tekst);

//Wyszukanie tekstu w poszczególnych ListView i usunięcie go z listy
PROCEDURE Form1.UsunWpis(text :String);
var
 x :Integer;
Begin
 //przeszukiwanie ListView1 i usunięcie wpisu...
 for x:= 0 to Form1.ListView1.Items.Count -1 do
    if Pos( LowerCase(text), LowerCase( ListView1.Items[x].Caption) ) > 0 then
       ListView1.Items.Item[poz].Delete;
 //przeszukiwanie drugiego ListView2 i usunięcie wpisu...
 for x:= 0 to Form1.ListView2.Items.Count -1 do
    if Pos( LowerCase(text), LowerCase( ListView2.Items[x].Caption) ) > 0 then
       ListView2.Items.Item[poz].Delete;
 //przeszukiwanie trzeciego ListView3 i usunięcie wpisu...
 for x:= 0 to Form1.ListView3.Items.Count -1 do
    if Pos( LowerCase(text), LowerCase( ListView3.Items[x].Caption) ) > 0 then
       ListView3.Items.Item[poz].Delete;
End;
</delphi>
0

użyj debugera - znajdź linijkę kodu, która powoduje błąd, i sprawdź, co tam jest nie tak. jak na mój gust używasz odwołujesz się do nie zainicjalizowanego obiektu.

0

Sorki nie zauważyłem :)

w miejsce "poz" wpisz "x" bo to jest numer pozycji wpisu i jeśli znajdzie taki
wpis to pobierze wartość x z rosnącej wartości pętli

1 użytkowników online, w tym zalogowanych: 0, gości: 1