Если я правильно понял, то в разных наборах CheckListBox есть элементы соответствующие одному и тому-же строковому значению:
"Программные средства формирования и контроля полномочий доступа в AC"
"Вибродатчики (акселерометры)"
и т.д.
Тогда почему бы не воспользоваться методом AddObject и не добавить просто нужную строку? Тогда нет никакой необходимости в этой куче ифов которые по сути дублируют визуальные элементы. А вместо всего этого безобразия пробежать в цикле по всем спискам и если элемент списка отмечен вывести в мемо связанный с этим элементом текст.
Вот так это может выглядеть:
Код:
unit Unit21;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, CheckLst;
type
TForm21 = class(TForm)
CheckListBox1: TCheckListBox;
CheckListBox2: TCheckListBox;
Memo1: TMemo;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
end;
TString = class
Text: String;
constructor Create(S: String);
end;
var
Form21: TForm21;
implementation
{$R *.dfm}
procedure TForm21.Button1Click(Sender: TObject);
var
i: Integer;
begin
for i := 0 to 5
do if CheckListBox1.Checked[i]
then Memo1.Lines.Add(TString(CheckListBox1.Items.Objects[i]).Text);
for i := 0 to 5
do if CheckListBox2.Checked[i]
then Memo1.Lines.Add(TString(CheckListBox2.Items.Objects[i]).Text);
end;
procedure TForm21.FormCreate(Sender: TObject);
var
i: Integer;
begin
for i := 0 to 5
do CheckListBox1.AddItem(IntToStr(i+1), TString.Create('This item 1.' + IntToStr(i+1)));
for i := 0 to 5
do CheckListBox2.AddItem(IntToStr(i+1), TString.Create('This item 2.' + IntToStr(i+1)));
end;
{ TString }
constructor TString.Create(S: String);
begin
Text := S;
end;
end.