各位好,我现在在编一个多页面文本编辑器。使用PageControl组件来作多页面的容器。
当点击新建按钮时,动态生成一个页面标签(Tabsheet)组件,然后以它为parent,再动态生成一个Richedit组件。
现在问题是,当我要对当前动态生成的标签下(Tabsheet)的动态生成的Richedit中的内容进行保存时,如何判断当前激活的Richedit组件名是什么。下面是我自定义新建页面的函数var
  Form1: TForm1;
  MyRichEdit1 : TRichEdit;
  title : sting;implementation{$R *.dfm}procedure newtab(title : string);       //自定义过程,增加TAB标签页。
var
  MyTabSheet1 : TTabSheet;
  title := '新建文件';begin
  MyTabSheet1 := TTabSheet.Create(Form1.PageControl1);
  MyTabSheet1.PageControl := Form1.PageControl1;
  Form1.PageControl1.ActivePage := MyTabSheet1;
  MyTabSheet1.Caption := title;
  MyRichEdit1 := TRichEdit.Create(MyTabSheet1);
  MyRichEdit1.Parent := MyTabSheet1;
  MyRichEdit1.Text := '';
  MyRichEdit1.Align := alClient;
  MyRichEdit1.ScrollBars := ssBoth;
  MyRichEdit1.Font.Size := 10;
  MyRichEdit1.SetFocus;
end;

解决方案 »

  1.   

    var aTest:TRichEdit;
    aTest:=TRichEdit(page1.ActivePage.Controls[0]);    //就是你要的TRichEdit
      

  2.   

    PageControl有一个当前活动页的属性的。
      

  3.   


    如果我在ActivePage里并不是只有一个动态控件,如果确定TRichEdit的名字呢??谢谢!!!
      

  4.   

    用遍历啊
     for i:=0 to page1.ActivePage.ControlCount-1 do
    begin
       if ( page1.ActivePage.Controls[i] is TRichEdit ) then
          aTest:=TRichEdit(page1.ActivePage.Controls[i]);
    end;
      

  5.   

    你的TRichEdit对象没有name的赋值》》???
    建议采用自定义格式对你的sheet与TRichEdit对象的name赋值,然后根据page.activepage的name样式找到TRichEdit对象,进行保存,这样,即方便自己使用, 也可以比遍历速度快很多
      

  6.   

    例如:
      第一个sheet名为sheet1, RichEdit名为:RichEdit1
      第二个sheet名为sheet2, RichEdit名为:RichEdit2
      第三个sheet名为sheet3, RichEdit名为:RichEdit3
      ......
    然后定位
      TRichEdit(PageControl1.ActivePage.FindChildControl(StringReplace(PageControl1.ActivePage.name, 'sheet', 'RichEdit'))).SetFocus;
      

  7.   

    看《delphi高手突破》,有一模一样的例子,面向对象的方法实现的,对你提高很有好处~