【问题标题】:Getting a TFrame owner to set TTabsheet caption让 TFrame 所有者设置 TTabsheet 标题
【发布时间】:2018-08-20 08:04:54
【问题描述】:

我有一个带有 TEdit 组件的 TFrame。框架在运行时作为 TPageControl 的 TTabsheet 动态创建。我需要在 TEdits KeyPress 方法上将 TTabSheet.Caption 设置为 TEdit.Text,但是,如何获取 Frame 的所有者以便设置 Caption?

procedure TKeywordFrame.KeywordNameEditKeyPress( Sender : TObject; var Key : Char );
  var
    AOwner : TComponent;

  begin
    if( ord( Key ) = VK_RETURN ) then
      begin
        AOwner := ?

        FKeywordListName := KeywordNameEdit.Text;
          with AOwner do
            begin
              Caption := KeywordNameEdit.Text;
            end;
      end;
  end;

我试过了

AOwner := TKeywordFrame.Owner;

DPS.KeywordFrame.pas(272):此处无法访问 E2233 属性“所有者”

AOwner := TKeywordFrame.GetOwner();

DPS.KeywordFrame.pas(272): E2076 这种形式的方法调用只允许类方法或构造函数

也许我在错误的大海捞针中翻找。

【问题讨论】:

  • 我不认为 Owner 是这里的正确选择。迭代 Parent 直到到达 TabSheet。
  • 请注意,您尝试访问 Owner/GetOwner 就像它是一个类方法一样。请改用 Self.Owner/Self.Parent(或简称 Owner/Parent)。
  • 您将什么作为所有者参数传递给 TKeywordFrame.Create ?如果是标签页,请使用@RM 的答案。否则,用 Uwe Raabe 的回答。不要忘记您必须将 AOwner 类型转换为 TTabSheet,这样您才能访问 Caption 属性。

标签: delphi


【解决方案1】:

Self.Parent 是正确的方向。谢谢 RM。

procedure TKeywordFrame.KeywordNameEditKeyPress( Sender : TObject; var Key : Char );
  var
    AOwner : TWinControl;

  begin
    if( ord( Key ) = VK_RETURN ) then
      begin
        AOwner := Self.Parent;

        FKeywordListName := KeywordNameEdit.Text;

          if( AOwner is TTabSheet ) then
            begin
              TTabSheet( AOwner ).Caption := FKeywordListName;
            end;
      end;
  end;

有趣的是,Self.Parent 指向 TTabSheet 而不是 TFrame,正如人们所假设的那样,因为那是控件所在的位置。

【讨论】:

    猜你喜欢
    • 2012-09-18
    • 1970-01-01
    • 2011-02-28
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 2019-07-17
    相关资源
    最近更新 更多