Озадачился следующим вопросом, но красивое решение найти не могу.
Есть CheckListBox1, ComboBox1. У них есть свойство Items.
procedure TForm1.Load_in_CB(CB: TObject);
begin
if CB is TComboBox then ...
if CB is TCheckListBox1 then ...
with CB do
begin
Items.AddObject(...)
... // - другие манипуляции с CB
end
end;
Вопрос: Есть ли красивая возможность использовать with CB do, чтобы не писать для двух компонентов разные with ... do? Другими словами заранее присвоить (CB as (TComboBox or TCheckListBox))?
Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
20-12-2019 01:30 | Комментарий к предыдущим ответам
20-12-2019 01:23 | Комментарий к предыдущим ответам
Думаю, что холивар на эту тему неуместен. Все, кто хотел, обозначили свой взгляд.
По вопросу автора: я не заметил коммент "другие манипуляции". Т.е. моё предложение обрабатывать свойства Items может не работать. Тогда можно использовать интерфейсы. Это не ответ именно на этот на вопрос. Но если необходимо единообразно работать с экземплярами произвольных классов, то это выход, как мне кажется.
17-12-2019 23:04 | Комментарий к предыдущим ответам
А конструкции с with - потенциальный источник трудно-отлавливаемых ошибок.
Хочу дополнить, что в том числе и потому что отладчик не может показать что там внутри блока with. Уже одно только это мне кажется достаточно для того, чтобы не использовать with. Да и вообще читаемость программы с with по факту падает.
Я бы использовал процедуру с параметром Items:TStrings. И тогда нет разницы. А конструкции с with - потенциальный источник трудно-отлавливаемых ошибок. Имхо.
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.