Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 ОФФТОП. Как избавиться от кучи if-ов при смене pagecontrol  [new]
mkr
Member

Откуда: Беларусь, Минск
Сообщений: 218
Смотрю проект, при переключении страницы в pagecontrol, вызывается несколько функций, выполняющих определённые, базовые действия: пересоздают popupmenu делает requery. Так вот в этих popupmenu и requery находится куча if-ов выполняющих действие в зависимости от установившейся страницы.
Есть ли возможность, все эти действия как-то вынести отдельно?
в теории, все действия для каждой TabSheet можно вынести в onShow, есть ли минусы?
30 июл 20, 18:50    [22175844]     Ответить | Цитировать Сообщить модератору
 Re: ОФФТОП. Как избавиться от кучи if-ов при смене pagecontrol  [new]
Victor Cookin
Member

Откуда: Самара
Сообщений: 737
mkr,

Совершенно всё равно где вызывать, разве если Pages могут появляться динамически, то с OnShow - сложнее.
30 июл 20, 19:30    [22175866]     Ответить | Цитировать Сообщить модератору
 Re: ОФФТОП. Как избавиться от кучи if-ов при смене pagecontrol  [new]
DimaBr
Member

Откуда:
Сообщений: 11808
Вместо IF-ов можно использовать CASE, но хрен редьки не слаще. С IF-ами хоть понятно к какой вкладке код
30 июл 20, 19:40    [22175869]     Ответить | Цитировать Сообщить модератору
 Re: ОФФТОП. Как избавиться от кучи if-ов при смене pagecontrol  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 62844
Блог
mkr
при переключении страницы в pagecontrol, вызывается несколько функций, выполняющих определённые, базовые действия: пересоздают popupmenu делает requery.

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

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

В OnShow чего?

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

Есть куча возможностей отрефакторить невменяемый код. Но чтобы ответить, как именно это стоит сделать - нужно смотреть на этот код и на требования к интерфейсу, отвечать в общем виде бессмысленно.
30 июл 20, 19:41    [22175870]     Ответить | Цитировать Сообщить модератору
 Re: ОФФТОП. Как избавиться от кучи if-ов при смене pagecontrol  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11984
У меня это сделано так:

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

2 пункт можно убрать, если объект хранить в Tag вкладки
31 июл 20, 15:05    [22176236]     Ответить | Цитировать Сообщить модератору
 Re: ОФФТОП. Как избавиться от кучи if-ов при смене pagecontrol  [new]
rgreat
Member

Откуда:
Сообщений: 6068
Вместо кучи if-ов можно использовать for.
31 июл 20, 15:25    [22176263]     Ответить | Цитировать Сообщить модератору
 Re: ОФФТОП. Как избавиться от кучи if-ов при смене pagecontrol  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 61571
Мои 5 копеек - что If-ы, что CASE, что другой спагетти-вариант
лучше (удобнее в сопровождении) независимых обработчиков
(OnShow и пр.) отдельных вкладок. Хотя разумнее рефакторить,
конечно, если есть время и нет задач поважнее. Например, надо
посмотреть, а чем там код для вкладок собсно отличается -
возможно, его можно упростить/объединить. Возможно, сам
интерфейс (пейджконтрол или некоторые вкладки) можно
упростить/улучшить. И т.д.

Posted via ActualForum NNTP Server 1.5

1 авг 20, 13:00    [22176512]     Ответить | Цитировать Сообщить модератору
 Re: ОФФТОП. Как избавиться от кучи if-ов при смене pagecontrol  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 62844
Блог
Гаджимурадов Рустам
Мои 5 копеек - что If-ы, что CASE, что другой спагетти-вариант

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

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

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

procedure RefreshQuery(AQuery: TQuery; ATabSheet: TTabSheet);
begin
  if Assigned(ATabSheet) and (ATabSheet.PageControl.ActivePage = ATabSheet) then RefreshQuery(AQuery);
end;

снимет половину их необходимости в if-ах. Про более серьёзные улучшения я даже не собираюсь начинать.
1 авг 20, 13:22    [22176517]     Ответить | Цитировать Сообщить модератору
 Re: ОФФТОП. Как избавиться от кучи if-ов при смене pagecontrol  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 61571
softwarer> При этих словах

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

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

Нет смысла гадать. С этой кверей ведь всё равно
ещё что-то кроме открытия делается, наверняка -
заполнение параметров, загрузка чего-то там и пр.

Posted via ActualForum NNTP Server 1.5

1 авг 20, 13:50    [22176525]     Ответить | Цитировать Сообщить модератору
 Re: ОФФТОП. Как избавиться от кучи if-ов при смене pagecontrol  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 62844
Блог
Гаджимурадов Рустам
ЯННП. Не спагетти или что ?

if-ы - это как раз то, что предлагал Дейкстра для борьбы со спагетти.
1 авг 20, 14:06    [22176530]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить