TFrame. Несколько фреймов одного типа на форме
Автор: Vlad aka Freeman
Проблема в следующем: если положить на одну форму два фрейма одного типа, то в дизайне все нормально, а при создании формы во время выполнения может произойти ошибка: Component named xxxx already exists. Причина - баг в коде загрузки фрейма из DFM.
ТИПОВЫЕ РЕШЕНИЯ
Чтобы такое не возникало, фреймы одного типа, размещенные на форме, должны иметь имена, отличные от ТипФреймаНомер, например, TMyFrame1 или TMyFrame5. Дайте фреймам другие имена, и форма будет создаваться нормально.
КОММЕНТАРИЙ
Описанный эффект возникает в случае, если один из нескольких экземпляров фрейма на форме имеет имя, соответствующее его типу, при отбрасывании первой "T". Например:
Frame1: TFrame1; // причина проблемы
Frame2: TFrame1;
Frame3: TFrame1;
|
Но!
Во-первых, автоматический генератор кода в IDE (вероятно, зная об этой
особенности - D5 SP1) дает имена вида:
Frame11 : TFrame1;
Frame12 : TFrame1;
Frame13 : TFrame1;
...
Frame21 : TFrame2;
|
Во-вторых, кому в здравом уме придет в голову заменять стандартные имена компонентов на свои, но тоже нумерованные? Бывают, конечно, случаи, когда номер имеет некий смысл в прикладном контексте, но уж очень редко. При этом еще нужно, чтобы это обстоятельство совпало с тем, что смысловая часть имени типа фрейма равна таковой для экземпляра.
Вывод: имейте хорошую привычку сразу давать осмысленные имена экземплярам компонентов, фреймов, форм, и вы никогда не нарветесь на подобные подводные камни.
|