VCL, похоже, предлагает два механизма для скрытия элементов управления от разработчиков форм: TControlState.csDesignerHide
и TControlStyle.csNoDesignVisible
.
Какая разница между ними в отношении IDE? Что вы должны использовать, когда?
VCL, похоже, предлагает два механизма для скрытия элементов управления от разработчиков форм: TControlState.csDesignerHide
и TControlStyle.csNoDesignVisible
.
Какая разница между ними в отношении IDE? Что вы должны использовать, когда?
Используйте 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