一个Form的简单的问题,希望能帮忙,来者有分 ( 积分: 100 )

  • 主题发起人 主题发起人 zhouye
  • 开始时间 开始时间
Z

zhouye

Unregistered / Unconfirmed
GUEST, unregistred user!
程序有一个工具条,上有很多个按钮,每一个按钮都差不多是如下内容,除了那个Frm_Monitor会改为不同的Form名称,如Frm_xxx1、Frm_xxx2;还有那个TFrm_Monitor也会改为对应的TFrm_xxx1、TFrm_xxx2等等。因为这样的按钮有10多个,我想用一个函数或者过程归纳一下,也就是把Frm_Monitor作为该函数过程的参数,把所有的按钮的click内容精简一下,但是TFrm_Monitor不知道该怎么替换了。

procedure TFrmMain.btn_MonitorClick(Sender: TObject);
begin
if Frm_Monitor = nil then
begin
LblAddress.Caption := 'Monitor;
Frm_Monitor := TFrm_Monitor.Create(nil);
Frm_Monitor.Parent := Panel2;
Frm_Monitor.Show;
Panel1Resize(Sender);
PageFlag := 1;
Panel3.Visible:=True;
if FirstFlag then
Frm_Monitor.act1.Execute;
end;
end;
 
用一个StringList就可以实现按名字绑定、查找特定的对象。

var
MonForms:TStringList=nil;
procedure TFrmMain.btn_MonitorClick(Sender: TObject);
var
SenderName:String;
begin
SenderName:=TComponent(Sender).Name;
if MonForms=nil then
MonForms:=TStringList.Create;
with MonForms do
if IndexOf(SenderName)>=0 then exit;
LblAddress.Caption := 'Monitor;
Frm_Monitor := TFrm_Monitor.Create(nil);
MonForms.AddObject(SenderName,Frm_Monitor)
//将名字和对象保存到MonForms列表中
Frm_Monitor.Parent := Panel2;
Frm_Monitor.Show;
Panel1Resize(Sender);
PageFlag := 1;
Panel3.Visible:=True;
if FirstFlag then
Frm_Monitor.act1.Execute;
end;

需要注意的是,当Frm_Monitor关闭时,应该将自己在MonForms列表中的对象项目删除,
否则就会出现应该创建而没有创建的情况。(在FormDestory事件中对MonForms进行基于
Object的定位,然后Delete即可)
 
试试用 registerClass 把窗体注册了。然后写个函数,参数是类名字字符串就可以了

转载我自己的示例

unit Unit1


interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls


type
TForm1 = class(TForm)
Button1: TButton

Edit1: TEdit

procedure Button1Click(Sender: TObject)

private
{ Private declarations }
public
{ Public declarations }
end


var
Form1: TForm1


implementation

uses Unit2


{$R *.dfm}
function CreateSimpleVCLObject(AClassName:String):Tobject

begin
Result:=Tobject(FindClass(AClassName).NewInstance)

Result:=TComponent(Result).Create(Application)

end


procedure TForm1.Button1Click(Sender: TObject)

var tto:tobject

begin
tto:=CreateSimpleVCLObject('TForm2')

TForm(tto).showmodal

tto.Free

end


initialization
Registerclass(TForm2)

//Tform2 要存在,并且不能由工程文件自动创建


end.
 
后退
顶部