Страница 1 из 3

CheckListBox: удалить выбранные итемсы

Добавлено: 10 фев 2007, 19:10
Сейчас_не_спящий
Доброго времени суток.
Проблема такая: есть CheckListBox. Добавить в него строку или очистить полностью я могу без проблем, а вот удалить из списка выбранные компоненты никак. Плиз помогите, тот бред что я писал для решения этой задачи (код) писать не буду, не хочу позориться, лучше один раз посмотреть на правильный код. Заранее благодарю.

Re: CheckListBox: удалить выбранные итемсы

Добавлено: 10 фев 2007, 20:06
Сейчас_не_спящий
А хотя вообще причём тут позориться, все так начинали, ну, может почти все
Вот код. Исправьте или напишите правильный плиз.

procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
begin
for i := 0 to CheckListBox1.Count -1 do
if CheckListBox1.Checked then
CheckListBox1.Items.Delete(i);
end;

Re: CheckListBox: удалить выбранные итемсы

Добавлено: 10 фев 2007, 20:34
Blood_Magic
procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
begin
i:=0;
while i<CheckListBox1.Count do
if CheckListBox1.Checked then CheckListBox1.Items.Delete(i) else Inc(i);
end;

Re: CheckListBox: удалить выбранные итемсы

Добавлено: 11 фев 2007, 09:24
Сейчас_не_спящий
! Супер ! Или скорее ужас.. Как я раньше не додумался через Пока сделать.. Мдя...
Пока спал даже придумал свой способ, не через While (Наверное тупейший способ который можно придумать, но всё же способ): через if not, тут считываются те что не выбраны и присваиваются переменной или записываются в файл, потом Items.Clear и записать итемсы из файла или считать с переменной... Вот такое может присниться ночью..=))
Благодарю за помощь.

Re: CheckListBox: удалить выбранные итемсы

Добавлено: 11 фев 2007, 18:35
Сейчас_не_спящий
&quot писал(а):Inc(i);
Ещё раз благодарю, код работает стабильно, но есть одно но: я не по школьной программе учу Дэлфи (т.е. мне дайте код, а я принесу и от меня отвяжутся или тип того), а для себя ( т.е. ещё и пытаюсь разобраться в коде). Итого к делу: что за оператор Inc? В учебниках найти его не смог. Если можно по подробнее о нём (тип, что выполняет, исключения и т.д.) Заранее благодарен.

Re: CheckListBox: удалить выбранные итемсы

Добавлено: 11 фев 2007, 19:26
Blood_Magic
Сейчас_не_спящий писал(а):Итого к делу: что за оператор Inc?
...........
i:=i+1

Re: CheckListBox: удалить выбранные итемсы

Добавлено: 11 фев 2007, 19:34
Хыиуду
Вообще хелп есть
inc(i) -> i:=i+1;
inc(i,x) -> i:=i+x;

Re: CheckListBox: удалить выбранные итемсы

Добавлено: 12 фев 2007, 11:00
Лелик_1044
Сейчас_не_спящий писал(а):А хотя вообще причём тут позориться, все так начинали, ну, может почти все
Вот код. Исправьте или напишите правильный плиз.

procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
begin
for i := 0 to CheckListBox1.Count -1 do
if CheckListBox1.Checked then
CheckListBox1.Items.Delete(i);
end;

Опиш твою ошибку тоже так раньше попадалась
Допустми у тебя 50 итемов в твоем листе
Ты ставишь галочки с 1-20
Идет твой цикл 1-20 удалились все нормально.
И число итемов уже осталось 30

НО в цикле у тебя бежит до 50 (как было изначально)
И когда заходит на items[30]. возникакет ошибка

поэтому самылй лучший выход использовать while or repeat

Re: CheckListBox: удалить выбранные итемсы

Добавлено: 12 фев 2007, 14:12
Сейчас_не_спящий
Есть ещё одна проблемка, хотя может для неё уже надо было бы создать новую тему, но, всё же, так сказать не отходя далеко от темы.

Вот занулёванный код (все имена компонентов по дэфолту и убрано всё лишнее):

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, CheckLst;

type
TForm1 = class(TForm)
CheckListBox1: TCheckListBox;
Button1: TButton;
Button2: TButton;
ComboBox1: TComboBox;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
CheckListBox1.Items.Add(ComboBox1.Text);
ComboBox1.SetFocus;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
i : integer;
begin
i := 0;
while i < CheckListBox1.Count do
if CheckListBox1.Checked then
CheckListBox1.Items.Delete(i)
else
Inc (i);
end;

end.

Как исходя из него сдалать так, чтобы в случае если ни один компонент не выбран Батон2 был не активный? Вариантов несколько было придумано (все основаны на onClickCheck и SelCount - может это изначально не правильно :( ), но любой в какой-то момент даёт сбой. Плиз хэлп.

Re: CheckListBox: удалить выбранные итемсы

Добавлено: 12 фев 2007, 15:10
Лелик_1044
Что ты имееш ввиду под

если ни один компонент не выбран