关于动态选取TabSheet的问题(送上100分)(100分)

  • 主题发起人 主题发起人 going
  • 开始时间 开始时间
G

going

Unregistered / Unconfirmed
GUEST, unregistred user!
在PagControl中动态创建TabSheet(其中包括一个RichEdit)后,如何实现
任选一个TabSheet后可以改变当前选中的RichEdit中的文本的字体?

(用PageControl1.ActivePage只能选中当前的TabSheet。但不知如何选中其中
的RichEdit)

有劳大家了!
 
例子(假定一页只有一个RichEdit)——
function TForm1.FindRichEdit: TRichEdit;
var
I: Integer;
begin
Result := nil;
with PageControl1.ActivePage do
for I := 0 to ControlCount - 1 do
if Controls is TRichEdit then begin
Result := Controls as TRichEdit;
Exit;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
R: TRichEdit;
begin
R := FindRichEdit;
if R <> nil then R.Font.Color := clRed;
end;
 
不用这么复杂,TPageControl有一个ActivePageIndex 属性:
case PagControl1.ActivePageIndex of
0: RichEdit1.font.name:='Arial';
1: RichEdir2.font.name:='...';
...
end;
 
zw84611:
因为TabSheet是动态创建的,所以无法确定Case中有几条。
 
dq:
你的方法可行,应该还有其他简单的方法吧?
顺便问一下:
for I := 0 to PageControl1.ControlCount - 1 do
可以实现找出所有TabSheet中的RichEdit吗?
我试了一下好像不行。

 
to going:
可以的,改造一下——

procedure TForm1.GetRichEdits(var List: TList);
var
I: Integer;
begin
if List = nil then Exit;
List.Clear;
with PageControl1.ActivePage do
for I := 0 to ControlCount - 1 do
if Controls is TRichEdit then List.Add(Controls);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
L: TList;
R: TRichEdit;
begin
L := TList.Create;
GetRichEdits(L);
for I := 0 to L.Count - 1 do begin
R := TRichEdit(L);
R.Font.Color := clRed;
end;
L.Free;
end;

至于简单的方法,可以参考一下这一段——

procedure TForm1.Button2Click(Sender: TObject);
var
I: Integer;
R: TComponent;
begin
for I := 1 to 5 do begin
R := FindComponent('RichEdit' + IntToStr(I));
if R is TRichEdit then TRichEdit(R).Font.Color := clRed;
end;
end;
 
接受答案了.
 
后退
顶部