Delphi TControlState.csDesignerHide与TControlStyle.csNoDesignVisible
VCL似乎提供了两种对表单设计器隐藏控件的机制:Delphi TControlState.csDesignerHide与TControlStyle.csNoDesignVisible,delphi,vcl,Delphi,Vcl,VCL似乎提供了两种对表单设计器隐藏控件的机制:TControlState.csDesignerHide和TControlStyle.csNoDesignVisible 就IDE而言,它们之间有什么区别?您应该在什么时候使用?摘要 使用TControlState.csDesignerHide阻止控件绘制 使用TControlStyle.csNoDesignVisible模拟Visible属性的运行时行为 详尽阐述 问得好!他们之间肯定有区别,所以我做了一些调查 在控件单元中搜索用法,我们发现:
TControlState.csDesignerHide
和TControlStyle.csNoDesignVisible
就IDE而言,它们之间有什么区别?您应该在什么时候使用?摘要
使用TControlState.csDesignerHide
阻止控件绘制
使用TControlStyle.csNoDesignVisible
模拟Visible
属性的运行时行为
详尽阐述
问得好!他们之间肯定有区别,所以我做了一些调查
在控件
单元中搜索用法,我们发现:
用于:TControlState.csDesignerHide
,TControl.InvalidateControl
,TWinControl.updateshow
,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属性结合使用。当Visible设置为True时,它不起作用。(通常,Visible属性仅影响运行时行为)
为了说明差异,下面是表单设计器的三个屏幕截图。在表单上从左到右放置:一个带有属性控制的“TStyleControl
”TControlStyle.csNoDesignVisible
,一个面板,一个带有属性控制的TControlState.csDesignerHide
,以及另一个面板,所有面板的Align属性都设置为alLeft
:
StateControl1.DesignerHide=True
StyleControl1.NoDesignVisible=True
和StyleControl1.Visible=False
国家一号似乎不太受欢迎。(1) -没有记录。(2) -包含/排除它的唯一代码('TControl'和'TWinControl'的
SetDesignVisible
)记录为“Delphi在表单设计期间内部使用”。(3) -VCL未使用,唯一调用SetDesignVisible
的代码位于“ribbons”中。我会尝试使用“控件样式”。@SertacSetDesignVisible
是属性设置器,实际上是唯一设置标志的例程,但我认为您从中得出了错误的结论:更重要的是在何处以及是否参考标志而不是设置标志。@NGLN-您错了,SetDesignVisible
不是属性设置程序。此外,我要说的是,VCL不使用它,在VCL中,正在测试的标志没有任何重要性,除非它是由某些代码设置的。@Sertac Ok,它不是属性设置器…;-)但我的意思是,尽管VCL没有设置标志,但组件构建器可能会设置。这是关于提供的框架,而不是使用的框架。我认为VCL中也没有太多设置csNoDesignVisible
标志。csNoDesignVisible
在一些地方使用,我可以找到PopUpdater、ActionClientItem、ActionPopupMenu、TabSheet、notebook页面和ribbon。当然,开发人员可能会使用csDesignerHide
,我没有得出其他结论/说法(只是建议反对)。但在国际海事组织,要么它应该是显而易见的它做什么,要么它应该被记录,以便能够使用它。只有在你回答之后,我才对它的目的有了一些初步的了解谢谢TControlStyle.csNodeDesignVisible只能与Visible属性结合使用-屏幕截图对此进行了最好的解释!