Delphi:当我期望更新它们时,帧属性不会更新(它们被卡住了)

6

我有一个表单上的框架。当我改变框架(添加/删除按钮、标签)时,表单中没有任何更改或控件在表单中的位置与框架中不同。如果从表单中删除框架并重新添加它,则一切正常。

为什么?我记得在Delphi 2010中没有问题(现在是Delphi XE)。

谢谢。


4
您可以在“编辑”菜单中使用“锁定控件”命令来防止这些更改。我的 Ctrl-L 热键 设计时包可能非常方便,可切换此菜单项。 - NGLN
2
我希望有一种方法只锁定框架。 :-) - Warren P
1个回答

16

你创建了一个框架,并在另一个表单上放置了一个实例,问题是稍后对原始框架所做的更改不会立即显示,直到您删除该实例并重新放置它为止?

您无需删除框架,只需右键单击并选择要从其主控件(原始框架)属性继承属性的控件,然后单击“恢复为继承状态”。奇怪的是,在框架中不能使用全选。

这是我避免使用框架的原因之一。我希望框架有一个“不允许自定义”属性(AllowCustom=false),通过不允许框架具有这种奇怪的双重属性设置,可以防止任何设计时DFM冲突。

将框架规范化的另一种方法是右键单击并查看表单文本,然后将框架缩小为此:

 inline Frame61: TMyFrame61
    Left = 0
    Top = 0
    Width = 500
    Height = 500
    Align = alNone
    TabOrder = 0
    ExplicitLeft = 31
    ExplicitTop = 33
  end

现在它根本不包含任何被覆盖的属性。

如果我将其中一个控件拖到别的地方(甚至是意外操作),则在放置了Frame的DFM中会发生以下情况:

 inline Frame61: TMyFrame6
    Left = 0
    Top = 0
    Width = 500
    Height = 500
    Align = alNone
    TabOrder = 0
    ExplicitWidth = 527
    ExplicitHeight = 337
    inherited Edit2: TEdit
      Left = 19
      Top = 77
      ExplicitLeft = 19
      ExplicitTop = 77
    end   
  end

在DFM中添加的额外内容可能会干扰你在其他级别所做的更改。通常情况下,添加额外控件和删除控件都不是问题(添加时额外控件应自动显示,删除控件时应消失),但是由于位置问题(控件重叠等),效果可能是直到后来才能看到更改。


+1 表示“恢复为继承状态”。我不知道这个。我一直在从表单中删除框架,然后再添加它。这样做更好!谢谢,Warrne。 - RobertFrank
2
+1 for "我避免使用框架"。对于简单的项目(比如放置在选项卡面板中的伪表单),它们还可以。但是当你开始玩继承框架时……它就成了一个维护的噩梦! - Arnaud Bouchez
有趣的是,在框架中"全选"不起作用。 -按住Ctrl键,拖动以选择帧实例中的所有控件。然后右键单击框架,选择"还原为继承状态"。框架非常酷并且非常有用,尽管它可能有些怪异(这算一个词吗?)。所有与框架相关的问题几乎都是由于编辑实例而不是原始对象引起的(很容易出现误操作)。 - Reversed Engineer
我发现运行时组合类要比使用框架(Frames)好得多,其中一些是“面板或子窗体对象”。事实上,可以很容易地做出一些几乎不可见的坏事情,这就是为什么框架很糟糕的关键所在。它们不仅有点古怪,而且非常不靠谱。 - Warren P

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接