【问题标题】:Opening a new form with specific tab打开带有特定选项卡的新表单
【发布时间】:2017-05-18 13:06:30
【问题描述】:

我希望这样的事情应该起作用:

Form2.Show();
Form1.Hide();
Form2.PageControl1.ActivePage := TabSheet1;

问题是我有多个按钮(在第一个表单中),我希望每个按钮在 PageControl 的特定选项卡中打开新表单。

错误:Undeclared identifier: 'TabSheet1'

【问题讨论】:

  • 我经常使用这些命令,没有任何问题。那么你的问题到底是什么?我认为您需要提供更多信息,最好是显示您的问题的小型示例程序。另外请说明它是 Firemonkey 还是 VCL,以及您使用的是哪个版本的 Delphi。
  • 它的 VCL。它说Undeclared identifier: 'TabSheet1' - Delphi 7

标签: delphi vcl


【解决方案1】:

消息显示 TabSheet1 未定义 - 这可能是(尽管没有向我们显示完整代码)因为您在父对象之外,所以您需要该行

Form2.PageControl1.ActivePage := Form2.TabSheet1;

【讨论】:

    【解决方案2】:

    Dsm 的答案是所提问题的正确答案。

    但从设计的角度来看,虽然这样可以正常工作,但它确实需要调用代码了解 Form2 的内部结构,这不是很好的类封装。我会改为向Form2 添加一个数据成员,以指示要在表单的OnShow 事件中显示的所需页面,然后在调用Show() 之前设置该成员,例如:

    type
      TWhichTab = (wtNone, wtTab1, wtTab2, ...);
    
      TForm2 = class(TForm)
        PageControl1: TPageControl;
        TabSheet1: TTabSheet;
        TabSheet2: TTabSheet;
        ...
        procedure FormShow(Sender: TObject);
        ...
      public
        ...
        InitialTab: TWhichTab;
      end;
    
      procedure TForm2.FormShow(Sender: TObject);
      begin
        PageControl1.ActivePageIndex := Ord(InitialTab)-1;
      end;
    

    Form2.InitialTab := wtTab2;
    Form2.Show();
    Form1.Hide();
    

    【讨论】:

    • 是的,我同意,尽管我会更进一步,指的是显示的内容而不是哪个选项卡,因为信息的显示方式应该取决于视觉对象。例如,标签可能会在 6 个月后重新排序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多