[Delphi] Usuwanie pustych wierszy z CB

0

Czemu to nie działa? Od tyłu też próbowałem i to samo. Program się kompiluje ale jest błąd przy użyciu tej procedurki. Sytuacja w ComboBoxie jest taka, że pierwsze 6 wierszy jest puste. Jak widać procedura ma usuwać puste wiersze.

for i := 0  to combobox1.Items.Count-1 do begin
  if combobox1.Items[i]='' then begin
   combobox1.Items.Delete(i);
  end;
 end;
0

Nie działa bo jak usuniesz to ilość elementów się zmniejszy i pętla będzie za wielka - usuwaj od końca.

0
for i :=combobox1.Items.Count-1  downto 1 do begin
  if combobox1.Items[i]='' then begin
   combobox1.Items.Delete(i);
  end;
end;

Nie działa zawsze jest ten sam błąd powtarzany "i" razy "Acces violation at addres blabla in module ntdll.dll blabla", w przypadku pętli od początku i końca.

0

Teoretycznie to powinno być dobre:

while i<ComboBox1.Items.Count do
      if ComboBox1.Items.Strings[i]='' then
         ComboBox1.Items.Delete(i)
      else inc(i);

Jednakże u mnie (Delphi 7 Personal) przy odwołaniu do pustego elementu poprzez CB.Items[i] lub CB.Items.Strings[i] kończy się AV w bibliotece ntdll.dll (za każdym razem).

0

Usuwa spacje z CB jak i powtarzające się wiersze (duplikaty). Łatwo przerobić to na Listboxa etc.

var
  NewList: TStringList;
  Idx: Integer;

 begin
      NewList := TStringList.Create;
    try
        for Idx := 0 to combobox1.Items.Count -1 do
            if (NewList.IndexOf(comboBox1.Items[Idx]) = -1) and
               (comboBox1.Items[Idx] <> '')
            then NewList.Add(comboBox1.Items[Idx]);
        comboBox1.Items.Text := NewList.Text;
    finally
        NewList.Free;
0

Usuwa nie spacje tylko puste wiersze..:) Sorry za pomyłkę [browar]

0

Na Delphi 6 Personal wykombinowalem tak i dziala bez zarzutu:

procedure TForm1.ClearEmpty(Sender: TObject);
var ID: Integer;
begin
   ID:= 0;
   with ComboBox1.Items do
      while (ID < Count) do
          if Strings[ID] = '' then
             Delete(ID)
          else
             Inc(ID);

end;
0

Wszystkie te sposoby działają dla listboxa, ale dla comboboxa nie!!! Zawsze ten sam blad o ktorym juz pisalem! Mam Delphi 7 Enterprise.

0

Przestań pisać takie pierdoły że nie działa :/
Używam tej procedury u siebie w programach w Comboboxie jak i Listboxie :[
Patrz co robisz, a potem pluj w monitor :[

procedure TForm1.Button1Click(Sender: TObject);
var
  NewList: TStringList;
  Idx: Integer;

 begin
      NewList := TStringList.Create;
    try
        for Idx := 0 to combobox1.Items.Count -1 do
            if (NewList.IndexOf(comboBox1.Items[Idx]) = -1) and
               (comboBox1.Items[Idx] <> '')
            then NewList.Add(comboBox1.Items[Idx]);
        comboBox1.Items.Text := NewList.Text;
    finally
        NewList.Free;
end;
 end;

<font size="4">Ta procedura usuwa puste wiersze, jak i itemy - duplikaty z Comboboxa!!!</span>

0

Twój kod Ctrl+C, Ctr+V

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