Форум: "Основная";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];
Вниз
Присвоение метода во время выполнения программы Найти похожие ветки
← →
jonik_sj (2004-08-16 16:03) [0]Мне необходимо присвоить некоторым компонентам на форме одинаковое событие на OnExit. Я пробегая по массиву Componetns
нахожу по условию нужные мне компоненты, затем делаю присваивание
TEdit(Frm.Components[i]).OnExit := Моя процедура;
Вообщем все работает нормально.
Вопрос в следующем, почему так можно делать и не повлечет ли это каких то последствий , потому как мои компоненты никакого отношений к компоненту Tedit не имеют и не являются его наследниками ???
← →
Гаврила © (2004-08-16 16:11) [1]Во первых, обязательно надо проверить на наследованность от TWinControl.
Во вторых, лучше все таки объявить своего первого потомка от TWinControl и типизировать под него
← →
Семен Сорокин © (2004-08-16 16:11) [2]проверяй перед этим на
if Frm.Components[i] is TEdit then
← →
Анонимщик © (2004-08-16 16:24) [3]Можно делать потому, что твой не-наследник TEdit"а - все равно, видимо, наследник TWinControl"а. Поэтому адреса поля FOnExit все равно совпадают. В этом случае никаких последствий не будет.
← →
jonik_sj (2004-08-16 16:29) [4]Семен Сорокин
А мне не надо проверять на принадлежность классу TEdit. Как проверять я знаю
Гаврила
Проверку я делаю. Они все наследники TWinontrol.
Наверное не точно написал, компоненты не мои, я их не писал.
На форме есть объекты трех типов: Образно тип TxxxDBEdit, TxxxDBDateEdit, TxxxLookupEdit. Наследниками TEdit они не являются .
Меня интересует вопрос какие последствия может иметь такое присваивание метода?
← →
jonik_sj (2004-08-16 16:31) [5]Анонимщик - спасибо
← →
s999 (2004-08-16 16:32) [6]Да не волнуйся, никаких последствий не будет. Хоть метод от TObject-а им присваивай.
← →
Гаврила © (2004-08-16 16:35) [7]
> Анонимщик © (16.08.04 16:24) [3]
В принципе да, адреса будут совпадать. Но как то все таки кривовато это выглядит - под TEdit.
> jonik_sj (16.08.04 16:29) [4]
Это скорее вопрос стиля.
Я имел в виду такую запись
TWinControlAccess = class(TWinControl);
{В том же модуле, чтобы был доступ к protected свойствам}
А далее
TWinControlAccess(Frm.Components[i]).OnExit := Моя процедура;
← →
jonik_sj (2004-08-16 17:41) [8]Гаврила
Спасибо, возьмем на заметку.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.031 c