我在pagecontrol中,都是动态创建一个page页,而且在每个page页中动态创建一个Twebbrowser,在别的事件里不能得到这个Twebbrowser控件的,为什么?
代码如下:
procedure TTdlg_URLTree.addpage1Click(Sender: TObject);
var
  TabSheet1: TTabSheet;
  WebBrowseradd: TWebBrowser;
  Flag,Frame,pData,Header: OLEVariant;
  count : Integer;
  strName:  string ;
begin  TabSheet1:=TTabSheet.Create(self);
  TabSheet1.PageControl:=PageControl1;
  TabSheet1.Caption:='Page1';
  TabSheet1.Name := 'eeeeeeee' ;
  WebBrowseradd:= TWebBrowser.Create(self) ;
  WebBrowseradd.Align:=alClient;
  TControl(WebBrowseradd).Parent:=TabSheet1;
  webname := WebBrowseradd.Name ;
 // WebBrowseradd.Name := 'afaf' ; // 这个不能修改,为只读属性
  showmessage(WebBrowseradd.Name);
//这里显示名字为 :   'Microsoft Web 浏览器控件' 
end。
 
在动态创建中加上这句,可以的,没问题,说明控件已经创建成功了。
  WebBrowseradd.Navigate('http://www.sohu.com');而在下面问题出现了。
procedure TTdlg_URLTree.browerIE1Click(Sender: TObject);
var
tabsheetactive : Ttabsheet ;
webName : string ;
begin
  webName := 'Microsoft Web 浏览器控件' ;
  tabsheetactive := pagecontrol1.ActivePage ;
  if (   tabsheetactive <> nil ) then
    showmessage('ddddd') ;
上面这个正常。 找到了tabsheetactive 。
下面这个就找不到。
if  TWebBrowser(tabsheetactive.pagecontrol1.FindComponent(webname)) <> nil then
begin 
  // 不会进入到这里 。为什么啊。
  showmessage('abcd') ;
  TWebBrowser(tabsheetactive.FindComponent(webName)).Navigate('http://www.sohu.com');
end;end;
  end;

解决方案 »

  1.   

    斗胆将你的代码改为:  if PageControl1.ActivePage.Controls[0] is TWebBrowser then
         (PageControl1.ActivePage.Controls[0] as TWebBrowser).Navigate('http://www.sohu.com');//依我猜想,你做的跟我那个东东一样一个TabSheet中,只有一个Child,而这个Child就是WebBrowser:)
      

  2.   

    可是为什么不能用 FindComponent(webname) 找到啊 ?
      

  3.   

    试试以下方法:
    var
      BB : TWebBrowser;
    begin
      BB := TWebBrowser.Create(Self);
      TWinControl(BB).Name := 'AAA';
      if Self.FindComponent('AAA')<>NIl then begin
        ShowMessage('找到了^_^');
      end;
    end;