【问题标题】:How refer to a particular instance of twebbrowser? - Delphi如何引用 twebbrowser 的特定实例? - 德尔福
【发布时间】:2013-05-10 21:52:19
【问题描述】:

如果我在运行时创建 n 个选项卡,并使用以下方法在每个选项卡内创建一个 Web 浏览器:

        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;

【问题讨论】:

  • 如果可能的话,你不应该投射。所以不要写 crm.Parent := TWinControl(ts);因为无论 ts 到底是什么,这都会使您的代码编译。只需删除演员表。在需要强制转换的情况下,使用 as 运算符,因此可以对强制转换进行运行时检查。

标签: delphi delphi-xe2


【解决方案1】:

窗口控件的 Controls 属性允许您获取每个子控件。因为这些孩子可以是任何 TControl 后代,所以您需要强制转换为 TWebBrowser。使用 as 运算符可以从强制转换的运行时有效性检查中受益:

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

【讨论】:

    【解决方案2】:
    var
      WB: TWebBrowser;
    
    WB := TWebBrowser(pageControl.ActivePage.Controls[0]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多