среда, 12 февраля 2014 г.

Вопросик про Show, Hide и Visible

Бывает, знаете ли, полезно скрывать часть информации от пользователя, если она ему в данный момент не нужна. Для этого у контролов в VCL есть свойство Visible, и есть ещё два метода – Show и Hide. Эта троица призвана управлять видимостью контролов на форме.
А вопрос такой. Как лучше писать:
LabelSomeInfo.Visible := True;
или
LabelSomeInfo.Show;
?
Как пишете Вы? Почему?

 

Ответ в следующей заметке.

9 коммент.:

Анонимно комментирует...

Я пишу:
LabelSomeInfo.Visible := True;

Правильно или нет, даже не задумывался... :)

Альберт комментирует...

Я тоже через visible

Unknown комментирует...

Смотрим код метода Show:

procedure TControl.Show;
begin
if Parent <> nil then Parent.ShowControl(Self);
if not (csDesigning in ComponentState) or
(csNoDesignVisible in ControlStyle) then Visible := True;
end;

Если есть уверенность, что компонент уже видим, то однозначно LabelSomeInfo.Visible := True;

Unknown комментирует...

То что ты сделал его невидимым не помешает сделать мне его видимым))

Надо удалять с родителя

Алексей Тимохин комментирует...

Для форм Show, Hide.
А для контролов Visible. (для edit-oв и кнопок еще и enabled заодно).
Почему?
Потому что такой способ меня вполне устраивает.

Всеволод комментирует...

Давайте поднимем вопрос на уровень выше.

Смена значения LabelSomeInfo.Visible не есть просто проблема "сделать компонент невидимым".
Это суть смены состояние интерфейса. Речь идёт о синхронизации состояния (данных) приложения и интерфейса. Вот это - как-кто это решает - интересно было бы поговорить.

Ну и классика - "скрывать/отображать" компоненты не есть "хорошо". Сильно мешает "стабильности" интерфейса, что может порождать проблемы "ориентации". Пользователь и так нагружен "изменением" данных, а тут мы ему ещё поддаёт "изменение" внешнего вида интерфейса - грубо говоря - что-то было, а потом исчезло.

Я как-то писал (обзову по-своему, чтобы на налететь на термины) формализованную модель состояний с правилами перехода, но проблемы повалили толпой при повышении эргономики интерфейса, т.е. тонкая реакция на микродействия ползьователя. А какие подходы пробовали вы?

Николай Зверев комментирует...

Всем
Спасибо, что не поленились написать комментарии. Моё видение вопроса читайте в следующей заметке.

Всеволод, я понимаю о чём Вы, но бывают случаи, когда по другому - никак. У меня такое постоянно - при работе с базами данных. Приложение одно, а баз у клиентов несколько, и они "немного" разных версий (кто-то успел обновить БД, а кто-то базу ещё не обновил, но уже хочет использовать новое приложение). В этом случае проще скрыть кусок интерфейса по условию в момент отображения формы.
Ну или вот ещё вариант - у пользователя нет прав для какого-то действия над объектом - скрываем (чтобы даже не задавался вопросом, мол а что это такое), появились права - отображаем. Конечно это противоречит "стабильности интерфейса", но порой свойство Visible предпочтительнее свойства Enabled.

balmo комментирует...

На самом деле там по меньшей мере 4 метода/свойства, которые весьма сильно различаются по своему функциональному назначению. Собственно, путаница возникает скорее всего из-за того, что мы не носители языка и тонкости перевода зачастую ускользают от нас.

1) Visible -- свойство, которое означает, имеет ли контрол возможность быть видимым. Т.е. если мы установим его в True, это ещё не значит что контрол отобразится. Например, его родитель может быть скрыт и быть слишком мал. С другой стороны, установив свойство в Hide, мы отнимаем у него возможность быть отображенным и он обязательно "спрячется".

2) Hide -- по сути, просто скрывает контрол. Работает всегда.

3) Show -- контролу разрешается быть видимым; кроме того, вызывается метод ShowControl у родителя который может (теоретически) выполнять некую работу, чтобы убедиться что контрол действительно будет показан. Например, контрол-родитель может прокрутить свою клиентскую область чтобы контрол попал на экран.

4) Showing -- функция позволяет проверить, действительно ли контрол отображается на экране в данный момент. (аналогично п.1: если Visible установлен в True, это ещё не значит что он он виден).

Вообще, в этих методах скрыты ещё некоторые плюшки и подводные камни, связанные с Design-time, перекрыванием нашего окна другим etc. Но это уже другой разговор)

Анонимно комментирует...

Грибок - , вызываемый патогенными микробактериями, считается одним из наиболее широко встречающихся заболеваний, характеризующихся обширной симптоматикой неприятных проявлений. Найти эту заразную болезнь можно практически везде: на пляже, в бассейне, сауне а также любом месте, с высокой проходимостью людского потока. И несмотря на то, что сейчас в продаже имеется бесконечное множество самых разных фармацевтических гелей и мазей, до появления на рынке комплекса на натуральной основе Варанга за короткий срок покончить с грибковыми бактериями, которые влияют не только на общеэстетический вид кожи ног и ногтевых пластин, но и причиняют при отсуствии должного лечения, необратимый урон тканям, было практически невозможно. Благодаря появлению этого инновационного крема, с уникальным натуральным составом, лечение грибка теперь не является проблемой. Не требует много времени и сил. Вылечить грибок стоп и ногтей можно будет всего лишь за один месяц использования мази. VarangaOfficial - варанга отзывы - исключительно достоверные, проверенные факты. Воспользовавшись услугами нашего ресурса, вы сможете узнать обстоятельную информацию касающуюся представленного средства. Лично увидеть данные о клиническом тестировании геля, прочитать реальные отзывы пользователей и врачей, использующих крем в своей лечебной практике. Изучить инструкцию по применению, прочитать особенности и методы работы мази, осмыслить, почему крем Варанга настолько эффективен, где нужно заказывать оригинальный препарат и, как избежать покупки подделки. Мы очень тщательно и скурпулезно проверяем публикуемые данные. Предоставляем нашим пользователям сведения, которые были взяты только из надежных источников. Если вы нашли у себя признаки грибкового поражения стоп или уже довольно продолжительное время, без ощутимых результатов стараетесь избавиться от этого неприятного коварного недуга, у нас на сайте вы найдете легкий и быстрый способ решения проблемы. Приобщайтесь и живите здоровой полноценной жизнью. Мы собрали ответы на все вопросы на одном информационном ресурсе.

Отправка комментария

.

.