【发布时间】:2020-10-25 13:50:38
【问题描述】:
在 Delphi 10.4 VCL 应用程序中,TCard(作为TCardPanel 的容器项)没有公共OnShow 和OnHide 事件(如TTabSheet 有)。
因此,当特定的TCard 被激活时,TCard.OnEnter 事件处理程序不会被触发。 TCard.OnEnter 事件处理程序仅在例如单击TCard 上的控件。
示例代码:
CardPanel1.ActiveCard := Card2;
在这种情况下,TCard.OnEnter 事件不会被触发!
是否可以使用公共 OnShow 和 OnHide 事件升级 TCard 类?或者是否可以模拟这些事件?
【问题讨论】:
-
不能只使用TCardPanel的OnCardChange事件吗?
-
@UweRaabe 我尝试使用 TCardPanel 的 OnCardChange 事件:当我尝试在该事件处理程序中使用
PrevCard.Name或NextCard.Name作为字符串来识别卡时,我会运行-时间错误。现在,我可以使用NextCard.Caption来识别卡,但这会导致“代码气味”,因为标题可能会在运行时发生变化。 CLEANEST 解决方案将升级到TCard.OnShow事件。 -
你为什么不用
ActiveCard? -
@Olivier 在哪种情况下?
-
为什么要提到名字?只需写
if NextCart = Card1或 `if PrevCard = Card2' 或任何有意义的内容。在不了解实际用例的情况下很难给出建议。