Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi TControlState.csDesignerHide与TControlStyle.csNoDesignVisible_Delphi_Vcl - Fatal编程技术网

Delphi TControlState.csDesignerHide与TControlStyle.csNoDesignVisible

Delphi TControlState.csDesignerHide与TControlStyle.csNoDesignVisible,delphi,vcl,Delphi,Vcl,VCL似乎提供了两种对表单设计器隐藏控件的机制:TControlState.csDesignerHide和TControlStyle.csNoDesignVisible 就IDE而言,它们之间有什么区别?您应该在什么时候使用?摘要 使用TControlState.csDesignerHide阻止控件绘制 使用TControlStyle.csNoDesignVisible模拟Visible属性的运行时行为 详尽阐述 问得好!他们之间肯定有区别,所以我做了一些调查 在控件单元中搜索用法,我们发现:

VCL似乎提供了两种对表单设计器隐藏控件的机制:
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”中。我会尝试使用“控件样式”。@Sertac
    SetDesignVisible
    是属性设置器,实际上是唯一设置标志的例程,但我认为您从中得出了错误的结论:更重要的是在何处以及是否参考标志而不是设置标志。@NGLN-您错了,
    SetDesignVisible
    不是属性设置程序。此外,我要说的是,VCL不使用它,在VCL中,正在测试的标志没有任何重要性,除非它是由某些代码设置的。@Sertac Ok,它不是属性设置器…;-)但我的意思是,尽管VCL没有设置标志,但组件构建器可能会设置。这是关于提供的框架,而不是使用的框架。我认为VCL中也没有太多设置
    csNoDesignVisible
    标志。
    csNoDesignVisible
    在一些地方使用,我可以找到PopUpdater、ActionClientItem、ActionPopupMenu、TabSheet、notebook页面和ribbon。当然,开发人员可能会使用
    csDesignerHide
    ,我没有得出其他结论/说法(只是建议反对)。但在国际海事组织,要么它应该是显而易见的它做什么,要么它应该被记录,以便能够使用它。只有在你回答之后,我才对它的目的有了一些初步的了解谢谢TControlStyle.csNodeDesignVisible只能与Visible属性结合使用-屏幕截图对此进行了最好的解释!