|
#16
|
|||
|
|||
А поставить точку останова в 65 строке приведенных исходников и посмотреть, чему равны Checklistbox4.Items.Count и Checklistbox6.Items.Count?
|
#17
|
||||
|
||||
Если я правильно понял, то в разных наборах 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. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 12.05.2014 в 10:21. |
#18
|
||||
|
||||
В общем посмотрел я еще раз ваш исходный код. То что там у вас написано никогда работать не будет правильно т.к. идет выбор одних и тех же вариантов. Давайте всю базу знаний по которой вы это делаете, тогда что-то путное можно посоветовать.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#19
|
|||
|
|||
Очевидно же, что в списках находятся какие-то модели аппаратуры, а в коде определяются группы выбранной аппаратуры.
Вариант 1 - можно сделать всё "красиво", месяц объяснять, как это будет работать. 2 - Можно поставить бряку, как я написал выше (только не на 65 строке, а в той, что выдает ошибку), увидеть причину ошибки и исправить (две минуты). А через пару лет автор сам допетрит до первого варианта. Автор всё-таки спрашивал, где ошибка в коде, а не в архитектуре, верно? Требуется уточнение. Закомментированое не работает? Выделенное не работает? Не работает то, что добавляете после выделенного? А что добавляется после выделенного? Если не работает выделенное, то пуст четвертый список. "когда выбираем только чеклистбокс 6, то только тогда и выходит эта преславутая ошибка.странно." Для того, чтобы проверить условие, не обязательно проверять все его операнды. Так и ведет себя компилятор по-умолчанию. Например, "A or B": если А = True, зачем проверять условие B? Почитайте про Short-Circuit Boolean Evaluation, попробуйте поставить опцию компилятора в настройках проекта Complete Boolean Eval, посмотрите, как изменится поведение ошибки. Последний раз редактировалось Skleroz, 13.05.2014 в 03:16. |
#20
|
||||
|
||||
Цитата:
Группа1 1. Апельсин 2. Пакет молока 3. Дыня Группа2 1. Круглый 2. Овальный 3. Прямоугольный Очевидно, что по отдельности элементы не дадут представление о сущности. А вот если есть связь по группам, то уже другое дело. Так что от автора требуется база знаний. ПС: А что качается авторского кода... Визуальные элементы служат для замены вот таких монструозных блоков кода. Как это сделать, я уже пример привел. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 13.05.2014 в 10:04. |
#21
|
|||
|
|||
Мы пытаемся исправить архитектуру, сделать "по-нормальному", а автору надо найти ошибку Index Out of Bounds.
Боюсь, что "по-нормальному" не получится, надо год-два подождать, чтобы автору это нужно было, если вообще что-то будет меняться. Посмотри, как именованы контролы, например. Поэтому считаю, что следует подсказать, как найти ошибку и пусть плывёт себе дальше. Хотя, если время свободное есть и автору будет интересно, можно руки повыпрямлять |
#22
|
|||
|
|||
О чем Вы толкуете? Я уже давно нашел ошибку - автор обращается к 3 элементу массива, содержащего 2 элемента.
Автор уже не отписывается, закройте тему. |
#23
|
||||
|
||||
Цитата:
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |