我有一个 TPageControl,其中包含许多 TTabSheets,其中包含 TForms(或者可能是 TFrames,但现在是 TForms)。
当一个选项卡进入视图时,我希望通知 TForm 或 TFrame 它已经出现在前面。我找不到任何可以做到这一点的东西。
我知道我可以在OnChange
事件中获得 Active TTabSheet,所以我尝试将此类添加到 TForm:
struct iTab
{
virtual void DoIt( void ) = 0;
};
与这个在OnChange
:
ICPTab *tab = dynamic_cast<ICPTab *>( sheet->Controls[ 0 ] );
认为我可以使用 RTTI 来获取iTab
指针并DoIt()
从中调用我得到警告:
[BCC32 Warning] Unit1.h(18): W8130 Interface 'IPTab' does not derive from IUnknown. (Interfaces should derive from IUnknown)
[BCC32 Warning] MainWindow.cpp(612): W8131 Casting Delphi style class 'TControl' to an interface. Use 'System::interface_cast<ICPTab>(cls)' instead
我对获取所有 IUnknown 不感兴趣,以便表单可以使用接口。
我可以使用以下方法获取 TFrame 或 TForm 指针:
TForm *tab = dynamic_cast<TForm *>( sheet->Controls[ 0 ] );
但不能用这个指针调用非 TForm 方法。调用Activate()
方法可以吗?
那么如何通知它现在显示的 TForm 或 TFrame 呢?