Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: petrusic - Settembre 13, 2021, 11:09:53 pm

Titolo: [Risolto] Cancellare un elemento da una ListBox
Inserito da: petrusic - Settembre 13, 2021, 11:09:53 pm
dopo avere riempito una una ListBox coi valori prelevati da ubna tabella di DB SQLite3, devo selezionare una rga della ListBox per trasferire il suo contenuto (data di calendario) in una DateTimePicker. Quindi devo cancellare dalla ListBox la riga trasferita.

Per la cancellazione della riga dalla ListBox ho seguito prima un metodo, poi un altro. Entrambi sono falliti, anche in maniera diversa.
Citazione
metodo n.1:
Codice: [Seleziona]
var
  i, indListBox, indListUlt: Integer;   
  dtContEdit, dtListBoxSel: String = ''; 
...
begin
   ...
  for i:= 0 to indListUlt do
     begin
      if (dtContEdit = LBGgAperte.Items[i]) then
      begin
         LBGgAperte.Selected[i];
         LBGgAperte.DeleteSelected;               
Sembra che il codice venga eseguito (NON da Errore), ma l'elemento selezionato per la cancellazione resta sempre nella ListBox.
Codice: [Seleziona]
metodo n.2:
[code]
...
begin
   ...
  for i:= 0 to indListUlt do
     begin
      if (dtContEdit = LBGgAperte.Items[i]) then
      begin
        dtListBoxSel:= LBGgAperte.Items[i];

        indListBox:= LBGgAperte.ItemIndex;  //  (°)
        LBGgAperte.items.delete(indListBox);  // (°)
quest'ultimo va addirittura in errore, perchè in "indListBox" vi viene caricato "-1"

(°)   istruzioni prelevate http:// http://]http://www.lazaruspascal.it/index.php?topic=227.msg1485#msg1485

Francamente  ??? non capisco.
Titolo: Re:Cancellare un elemento da una ListBox
Inserito da: DragoRosso - Settembre 13, 2021, 11:38:52 pm

metodo n.1:
Codice: [Seleziona]
...
         LBGgAperte.Selected[i];
         LBGgAperte.DeleteSelected;               
...

Hai usato la proprietà Selected per leggere lo stato ( ;) ), se vuoi selezionare la riga devi porla a true:
Codice: [Seleziona]
...
         LBGgAperte.Selected[i] := True;
         LBGgAperte.DeleteSelected;               
...

Nel secondo metodo, la proprietà ItemIndex rimane a -1 finchè non è selezionata un riga ... nel tuo caso ovviamente doveva prima essere selezionata a mano ad esempio con il mouse .....

Ciao
Titolo: Re:Cancellare un elemento da una ListBox
Inserito da: petrusic - Settembre 14, 2021, 12:08:29 pm
Quindi i due procedimenti sono tutti e due validi e servono ad affrontare situazioni diverse.

In questo caso e nel passo in cui tocca al programma decidere la riga da selezionare, è opportuno usare il primo metodo: Ho modificato, seguendo il tuo suggerimento, la riga di selezione:
Codice: [Seleziona]
 LBGgAperte.Selected[i]:= True; 
Ora la successiva riga di cancellazione viene eseguita correttamente.

Grazie sempre!