Ответ 1
Резюме
Используйте TControlState.csDesignerHide
, чтобы предотвратить рисование элемента управления.
Используйте TControlStyle.csNoDesignVisible
для имитации поведения среды выполнения Visible
.
Разработка
Хороший вопрос! Там просто должна быть разница между ними, поэтому я сделал небольшое расследование.
Поиск использования в блоке Controls
, мы находим, что:
-
TControlState.csDesignerHide
используется в:TControl.InvalidateControl
,TWinControl.UpdateShowing
,TWinControl.PaintHandler
,TWinControl.PaintControls
, - в дополнение к этим методам,
TControlStyle.csNoDesignVisible
также используется в:TControl.Show
,TControl.Repaint
,TControl.CMVisibleChanged
,TWinControl.AlignControls
,TWinControl.ControlAtPos
,TWinControl.CMVisibleChanged
,TWinControl.GetControlExtents
,TWinControl.CalcConstraints
,TWinControl.CanAutoSize
.
Таким образом, TControlState.csDesignerHide
используется только в операциях рисования, тогда как TControlStyle.csNoDesignVisible
также используется в операции позиционирования и выравнивания.
Другими словами, используйте:
-
TControlState.csDesignerHide
, если вы хотите контролировать видимость, -
TControlStyle.csNoDesignVisible
, если вы также хотите контролировать присутствие.
Кроме того, TControlStyle.csNoDesignVisible
работает только в сочетании с видимым свойством. Это не действует, когда Visible установлен True. (Обычно свойство Visible влияет только на поведение во время выполнения).
Чтобы проиллюстрировать разницу, получим три снимка экрана конструктора форм. На форме размещены слева направо: "TStyleControl
" с элементом управления, управляющим TControlStyle.csNoDesignVisible
, панелью, "TStateControl"
с управляющим свойством TControlState.csDesignerHide
и другой Panel, все с атрибутом Align, установленным на alLeft
:
- Все с настройками по умолчанию
-
StateControl1.DesignerHide = True
-
StyleControl1.NoDesignVisible = True
иStyleControl1.Visible = False