| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Звук, графика и видео > Ошибка с динамически созданными компонентами |
| Автор: ZufuS 16.12.2006, 17:08 | ||
Имеется компонент струкутры TEdit. При изменении его текста на форме (в ScrollBox) должны разместиться Label'ы в количестве, указанном в тексте Edit'a.
При первом нажатии цифры всё хорошо, а при втором появляется ошибка. Подскажите как нужно производить уничтожение этих компонентов и почему при вводе 0 сразу появляется ошибка, а при вводе другой цифры, пока не нажать очередную, всё нормально. |
| Автор: Bitter 16.12.2006, 20:26 |
| 1. Перед созданием компонентов напиши for i:=0 to Form1.n do if Assigned(Label[i]) then Label[i].Free; // это удаление предыдущих лабелов. 2. При вводе 0 получаешь SetLength( бла-бла, 0 ). т.е. в списке ноль элементов, после чего производится попытка создать один элемент (for от НОЛЬ до НОЛЬ т.е один проход цикла). Надо писать for i:=1 to Form1.n do Label[i-1] ..... ..... тогда на ноль реакции не будет. 3. Ошибка, возникающая после ввода второй цифры связана с тем, что уже созданным элементам списка присваевается значение TLabel.Create(self). Этого делать нельзя (см. пункт 1) |
| Автор: ZufuS 16.12.2006, 20:53 | ||
Всё ли я правильно написал? Ничего не изменилось. Хочу заметить, что если ввести что-нибудь от 100 до 109, то все 3 цифры вводятся нормально и ругаться начинает на четвертой. А если ввести, например, 55, то уже на второй. |
| Автор: Bitter 16.12.2006, 22:54 | ||
|
| Автор: ZufuS 16.12.2006, 22:59 |
| Спасибо |