powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ОФФТОП. Как избавиться от кучи if-ов при смене pagecontrol
10 сообщений из 10, страница 1 из 1
ОФФТОП. Как избавиться от кучи if-ов при смене pagecontrol
    #39985415
mkr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотрю проект, при переключении страницы в pagecontrol, вызывается несколько функций, выполняющих определённые, базовые действия: пересоздают popupmenu делает requery. Так вот в этих popupmenu и requery находится куча if-ов выполняющих действие в зависимости от установившейся страницы.
Есть ли возможность, все эти действия как-то вынести отдельно?
в теории, все действия для каждой TabSheet можно вынести в onShow, есть ли минусы?
...
Рейтинг: 0 / 0
ОФФТОП. Как избавиться от кучи if-ов при смене pagecontrol
    #39985424
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mkr,

Совершенно всё равно где вызывать, разве если Pages могут появляться динамически, то с OnShow - сложнее.
...
Рейтинг: 0 / 0
ОФФТОП. Как избавиться от кучи if-ов при смене pagecontrol
    #39985426
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вместо IF-ов можно использовать CASE, но хрен редьки не слаще. С IF-ами хоть понятно к какой вкладке код
...
Рейтинг: 0 / 0
ОФФТОП. Как избавиться от кучи if-ов при смене pagecontrol
    #39985427
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mkr
при переключении страницы в pagecontrol, вызывается несколько функций, выполняющих определённые, базовые действия: пересоздают popupmenu делает requery.

Когда коту нефиг делать, он пересоздаёт popupmenu...

mkr
в теории, все действия для каждой TabSheet можно вынести в onShow

В OnShow чего?

mkr
Так вот в этих popupmenu и requery находится куча if-ов выполняющих действие в зависимости от установившейся страницы. Есть ли возможность, все эти действия как-то вынести отдельно?

Есть куча возможностей отрефакторить невменяемый код. Но чтобы ответить, как именно это стоит сделать - нужно смотреть на этот код и на требования к интерфейсу, отвечать в общем виде бессмысленно.
...
Рейтинг: 0 / 0
ОФФТОП. Как избавиться от кучи if-ов при смене pagecontrol
    #39985592
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня это сделано так:

1. К каждой вкладке привязан объект-наследник некоторого TCustomTabControl
2. При переключении вкладки ссылка на текущий объект сохраняется в FCurrentControl: TCustomTabControl
3. Все действия на вкладке вызывают методы

2 пункт можно убрать, если объект хранить в Tag вкладки
...
Рейтинг: 0 / 0
ОФФТОП. Как избавиться от кучи if-ов при смене pagecontrol
    #39985609
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вместо кучи if-ов можно использовать for.
...
Рейтинг: 0 / 0
ОФФТОП. Как избавиться от кучи if-ов при смене pagecontrol
    #39985774
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мои 5 копеек - что If-ы, что CASE, что другой спагетти-вариант
лучше (удобнее в сопровождении) независимых обработчиков
(OnShow и пр.) отдельных вкладок. Хотя разумнее рефакторить,
конечно, если есть время и нет задач поважнее. Например, надо
посмотреть, а чем там код для вкладок собсно отличается -
возможно, его можно упростить/объединить. Возможно, сам
интерфейс (пейджконтрол или некоторые вкладки) можно
упростить/улучшить. И т.д.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ОФФТОП. Как избавиться от кучи if-ов при смене pagecontrol
    #39985777
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Мои 5 копеек - что If-ы, что CASE, что другой спагетти-вариант

При этих словах Дейкстра перевернулся в гробу и подумал много тёплых ласковых слов про современных разработчиков.

Гаджимурадов Рустам
Например, надо посмотреть, а чем там код для вкладок собсно отличается

Провангую, что

Код: pascal
1.
2.
3.
4.
procedure RefreshQuery(AQuery: TQuery; ATabSheet: TTabSheet);
begin
  if Assigned(ATabSheet) and (ATabSheet.PageControl.ActivePage = ATabSheet) then RefreshQuery(AQuery);
end;


снимет половину их необходимости в if-ах. Про более серьёзные улучшения я даже не собираюсь начинать.
...
Рейтинг: 0 / 0
ОФФТОП. Как избавиться от кучи if-ов при смене pagecontrol
    #39985783
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer> При этих словах

ЯННП. Не спагетти или что ?

> Провангую, что

Нет смысла гадать. С этой кверей ведь всё равно
ещё что-то кроме открытия делается, наверняка -
заполнение параметров, загрузка чего-то там и пр.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ОФФТОП. Как избавиться от кучи if-ов при смене pagecontrol
    #39985788
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
ЯННП. Не спагетти или что ?

if-ы - это как раз то, что предлагал Дейкстра для борьбы со спагетти.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ОФФТОП. Как избавиться от кучи if-ов при смене pagecontrol
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]