delphi - 访问子 GUI 属性标准

标签 delphi oop standards

我想知道访问子组件控件属性的标准是什么。

例如,我有一个主窗体,它创建一个带有标签的子窗口。使用 Delphi 可以只执行 ChildForm.Label.Caption := 'text' ,但是由于某种未知的原因,我感觉这是错误的。设置文本的另一种方法是为 ChildForm 设置一个属性,设置该属性时会调用更新标签标题的方法。

有什么理由让我应该以这种或另一种方式这样做吗?

最佳答案

我想到了四种可能性:

  • a:直接访问子表单的组件及其属性,如 你建议

    ChildForm.Label.Caption := 'text',
    

Plus:快速、简单。 缺点:您的子表单的“内部结构”不必要地暴露给外界,因此您的调用代码可能会变得更加脆弱。

  • b:通过子表单的新发布属性进行访问

    ChildForm.LabelCaption := 'text',
    

Plus:如果您希望能够通过 IDE 表单设计器轻松设置属性,则非常有用。比上面的“a”封装得更好。 减号:可能是我最不喜欢的方法,但我无法确切解释原因。属性很强大,但幕后发生的所有事情只是让我有点担心

  • c:通过子表单 setter 方法访问

    ChildForm.SetCaption('text')
    

Plus:比 B 更简单,但具有相同的改进封装,并且(在我看来)稍微干净的感觉。

  • d:对于设置,通过附加构造函数参数进行访问

在许多情况下,您只是希望在创建表单时能够稍微对其进行自定义。在这种情况下,向构造函数添加参数是最简单的方法。它使您不必担心属性的“可读”性质,并且标题在表单创建时变得固定(就外界而言),这可能会有所帮助。

FormChild := TChildForm.Create(nil, 'test');

加号:省去了附加属性或方法的麻烦。 减号:并不适用于所有情况。

关于delphi - 访问子 GUI 属性标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11892618/

相关文章:

delphi - 如何递归地检测文件的更改?

delphi - TBitmap 在非相关图形代码后丢失剪切区域

Delphi:启动 MCI 时出现 EMCIDeviceError

c++ - 防止对象过早销毁

python - 方法是否用类实例化,消耗大量内存(在 Scala 中)?

c - OOP 和 C 中的接口(interface)

c++ - 小写 null 在 C++ 中有效吗?

delphi - 为什么 TCusomWinSocket.ReceiveBuf 不返回 0?

c++ - 可以使用 "and"、 "or"等代替 "&&"、 "||"吗?

sql - 您最有用的数据库标准有哪些?