【问题标题】:Delphi: frame properties do not update when I expect them to (they get stuck)Delphi:当我期望它们更新框架属性时(它们卡住了)
【发布时间】:2011-10-20 06:56:57
【问题描述】:

我在表单上有一个框架。当我更改框架(添加/删除按钮、标签)时,表单上不会出现任何更改,或者控件在表单中的其他位置位于框架中。如果要从表单中删除框架并重新添加 -> 好的。

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

谢谢。

【问题讨论】:

  • 您可以使用编辑菜单中的锁定控件命令阻止这些更改。我的Ctrl-L hotkey designtime 包可能对切换此菜单项很方便。
  • 我希望有一种方法可以只锁定框架。 :-)

标签: delphi tframe tform


【解决方案1】:

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

您不需要删除框架,只需右键单击并选择您希望其属性来自其主(原始框架)属性的控件,然后单击Revert to inherited。奇怪的是,全选在框架中不起作用。

这是我避免使用框架的原因之一。我希望框架具有“不允许自定义”属性 (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 表示“恢复为继承”。我不知道。我一直在从表单中删除框架,然后再次添加它。这好多了!谢谢,沃恩。
  • +1 表示“我避免使用框架”。对于简单的项目(例如放置在选项卡式面板中的伪表单),它们就可以了。但是,当您开始使用继承框架时……维护起来简直就是一场噩梦!
  • “奇怪的是,全选在框架中不起作用。” - 按住 Ctrl 键并拖动以选择框架实例中的所有控件。然后右键单击框架,并恢复为继承。框架很酷而且非常有用,即使不是有点特殊(这是一个词吗?)。几乎所有的框架问题都是由编辑实例引起的(很容易出错),而不是原来的。
  • 我发现做类的运行时组合比使用框架好得多,其中一些是“面板或子窗体类对象”。做坏事很容易,几乎看不见的事实是框架不好的关键。它们不仅有点特殊,而且非常狡猾。
猜你喜欢
  • 2015-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多