【问题标题】:How to execute some code when user switches to a nested tabsheet?当用户切换到嵌套标签表时如何执行一些代码?
【发布时间】:2010-12-13 03:31:07
【问题描述】:

我有一个具有 3 个 TTabSheet 的 TPageCONttrol,其中一些具有进一步的具有 TTabSheet 的 TPageCONttrol

有点

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

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

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

事实上,我所能看到的只是将一大堆开关/案例放入 Page Control 1 的 OnChange 事件中......是更好的方法吗?

【问题讨论】:

    标签: delphi


    【解决方案1】:

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

    编辑: 如果您选择在选项卡表中使用 TFrame,请转到框架的“公共”部分,按 CTRL+SPACE 并键入“create”,这样您将覆盖“Create”构造函数并重复“Destroy”,这样您将覆盖那也是

    【讨论】:

    • 呃,谢谢,但我宁愿按原样使用它,而不是使用框架 ....
    • 我举了一个例子,当用户点击它的父标签时,用户不会在标签上点击,但仍然会看到它(这意味着我的代码需要更新它)。
    • 框架几乎就像标签页一样,只是你可以将它作为“视图”重用,我首先建议框架的唯一原因是你可以在其他部分重用框架应用程序,但这一切都取决于您的设计需求和选择,玩得开心;-)
    【解决方案2】:

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

    【讨论】:

    • +1,使用框架只是一个建议,你的 OnChange 建议也不错
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-06
      相关资源
      最近更新 更多