Jer*_*dge 5 delphi delphi-7 access-violation
我正在动态创建多种不同类型的控件,并将它们存储在后台列表中.其中两个控件是TEdit和TLabel.这些控件都是TPanel控件的子控件.
当我写入TEdit.Text和TLabel.Caption属性时,从TPanel.Controls(从错误的索引中获取它们)读取时,我意外地将TEdit与TLabel混淆了.不知何故,它甚至没有引起任何例外.
它确实像TLabel(SomeEditControl).Caption:= 'This is a label control';
和TEdit(SomeLabelControl).Text:= 'This is an edit control';
它会将TEdit.Text数据在TLabel.Caption财产,并在TEdit.Text属性TLabel.Caption数据.我很困惑,这没有引发异常...我唯一可以猜到的是,TEdit.Text和TLabel.Caption属性恰好恰好在控件类之间使用相同的内存地址.
为什么这不会导致访问冲突?
在TEdit.Text
来自TControl.Text
和TLabel.Caption
来自TControl.Caption
.但请看下面的声明TControl
:
...
property Caption: TCaption read GetText write SetText stored IsCaptionStored;
...
property Text: TCaption read GetText write SetText;
...
Run Code Online (Sandbox Code Playgroud)
具有与之关联的文本的控件通过SetText
和GetText
方法来管理它.根据控件的类型,这些与控件Caption
或Text
属性相关联.从文档中,
注意:显示文本的控件使用Caption属性或Text属性来指定文本值.使用的属性取决于控件的类型.通常,Caption用于显示为窗口标题或标签的文本,而Text用于显示为控件内容的文本.
归档时间: |
|
查看次数: |
556 次 |
最近记录: |