2013-05-10 70 views
0

如果創建n個Tabsheets在運行時使用的方法,如創建每個標籤頁內一個的Webbrowser:如何引用twebbrowser的特定實例? - 德爾福

 procedure createTab; 
     var crm: TWebbrowser; 
     var ts: TsTabSheet; 
     begin 

     //Instance of tabsheet 
     ts    := TsTabSheet.Create(pageControl); 
     ts.PageControl := pageControl; 

     //Instance of webbrowser   
     crm     := TWebbrowser.Create(ts); 
     crm.Parent   := TWinControl(ts); 
     crm.Align    := alClient; 
     end; 

當標籤頁實例之一是激活我怎麼能知道至極網頁瀏覽器是裏面?示例:

procedure navigateToActiveTabsheet(url: string); 
      begin 
      //TO DO - How navigate to webbrowser inside active tabsheet? 
      end; 

謝謝!

+0

如果可能的話,您不應該投射。所以不要寫crm.Parent:= TWinControl(ts);因爲這會讓你的代碼編譯,而不管它真的是什麼。只需刪除演員。在需要強制轉換的情況下,使用as運算符,因此需要對演員陣列進行運行時檢查。 – 2013-05-11 06:55:52

回答

1

窗口控件的Controls屬性允許您獲取每個子控件。因爲這些孩子可以是任何TControl後裔,你需要投給TWebBrowser。使用as操作符可以從演員的運行時有效性檢查中受益:

procedure navigateToActiveTabsheet(url: string); 
var 
    wb: TWebBrowser; 
begin  
    wb := pageControl.ActivePage.Controls[0] as TWebBrowser; 
    wb.Navigate(url); 
end; 
0
var 
    WB: TWebBrowser; 

WB := TWebBrowser(pageControl.ActivePage.Controls[0]);