当用户切换到嵌套的标签页时,如何执行一些代码?

时间:2010-12-13 03:31:08

标签: delphi

我有一个TPageCOntrol,它有3个TTabSheet,其中一些还有TPageCOntrol,它们有一个TTabSheet

排序

Page Control 1
  TabSheet 1
  TabSheet 2
    Page Control 2
      TabSheet 2a
      TabSheet 2b
  TabSheet 3

现在,只要其中一个标签页对用户可见,我想执行一些代码,但我不确定要挂钩哪个事件。

例如,如果用户正在查看TabSheet 1并切换到显示TabSheet 2的{​​{1}},那么我想执行Tabsheet 2a的代码,但我无法挂钩TabSheet 2a的OnEnter或OnShow。它不是Page Control2的OnChange。

事实上,我所能看到的只是将一大堆switch / case放入Page Control 1的OnChange事件......这是更好的方法吗?

3 个答案:

答案 0 :(得分:4)

每个TabSheet都有“OnShow”事件,只要用户点击它并使其可见就会触发,这应该可以解决问题,但是在一个标签页中有一个页面控件,它有另一个页面控件作为父级,所以它非常重在UI上,尝试使用您将在tabheet的OnShow事件上创建的框架并销毁在tabheet的OnHide事件上。

编辑: 如果您选择在标签页中使用TFrame,请转到框架的“公共”部分,按CTRL + SPACE并键入“创建”,以便您将覆盖“创建”构造函数并重复“销毁”,这样您将覆盖那还是

答案 1 :(得分:2)

我挂了每个PageControl的OnChange()并检查了ActivePage。它适用于我,无需重新设计使用框架。

答案 2 :(得分:1)

我严格使用Tabsheets上的“onEnter”事件。但是当焦点进入标签页时,我才会被解雇。所以我在页面控件发生变化时手动将焦点设置到标签页。

procedure TForm1.PageControl1Change(Sender: TObject);
begin
    pagecontrol1.ActivePage.SetFocus;
end