2010-12-13 5 views
2

私は3 TTabSheetを持っては、TPageControlを持っており、それらのいくつかは今、それらのタブシートの一つは、私が実行したいユーザーに見えるようになるたびユーザーが入れ子になったタブシートに切り替えると、コードを実行する方法は?

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

のTTabSheet

並べ替えを持って、さらには、TPageControlを持っていますいくつかのコードが、私はどのイベントをフックするか分からない。例えば

ユーザーがTabSheet 2aが表示されているTabSheet 2TabSheet 1やスイッチを見ているならば、私はタブシート部2aのコードを実行したいが、私はタブシート部2aのフォーカス取得時やOnShowをフックすることはできません。それはPage Control2のOnChangeではありません。

実際、私が見ることができるのは、ページコントロール1のOnChangeイベントにスイッチ/ケース全体を入れることです。これはもっと良い方法ですか?

答えて

2

私は各PageControlのOnChange()とActivePageをフックしました。フレームを使うように再設計することなく、私のために働く。

+0

+1、フレームを使用して、ちょうど示唆、あなたのOnChangeの提案も良いです – ComputerSaysNo

4

各TabSheetには、ユーザーがクリックして表示されるたびにトリガーされる「OnShow」イベントがありますが、これはトリックを行う必要がありますが、ページコントロール内には親として別のページングコントロールがあり、 UIで重い場合は、タブシートのOnShowイベントで作成し、タブシートのOnHideイベントで破棄するフレームを使用してみてください。

編集: TFrameをタブシート内で使用する場合は、フレームの「公開」セクションに移動し、CTRL + SPACEキーを押し、「作成」を入力して「作成」コンストラクタをオーバーライドし、あなたはそれをオーバーライドするように "破棄"してください。

+0

ERRM、おかげで、私はむしろちょうど – Mawg

+0

....むしろ使用フレームよりも、それにそれがある道を行くだろうと私は、ユーザーがタブ上なめるません例を与えたが、親タブをクリックしてもそれが表示されます(私のコードはそれを更新する必要があります)。 – Mawg

+0

フレームはタブシートとほとんど同じですが、単に「ビュー」として再利用することができます。最初にフレームを提案した唯一の理由は、アプリケーションの他の部分でフレームを再利用できるということですあなたのデザインのニーズと選択に、楽しい;-) – ComputerSaysNo

1

私は、タブシート上で "onEnter"イベントを使用しています。しかし、私はフォーカスがタブシートに入るときにのみ解雇されます。だから私は手動でタブシートにpagecontrolが変更されたときにフォーカスを設定しています。

procedure TForm1.PageControl1Change(Sender: TObject); 
begin 
    pagecontrol1.ActivePage.SetFocus; 
end 
関連する問題