s:string; s:='MyForm' 窗体MyForm的Public定义了一个过程如SetData();如何根据 s 来调用MyForm窗体的

  • 主题发起人 主题发起人 东岳
  • 开始时间 开始时间

东岳

Unregistered / Unconfirmed
GUEST, unregistred user!
s:string; s:='MyForm' 窗体MyForm的Public定义了一个过程如SetData();如何根据 s 来调用MyForm窗体的SetData()????(30分)<br />如提
 

这样吧,在 public 部分加入:

property S: string read FS write SetData;
 
同意楼上的。
 
to darnis:
这样怎么行?
我要的是: 在另一个窗体的按钮触发事件,给个变量S,根据S调用窗体名为S的窗体方法。
 
s:string; s:=&amp;apos;MyForm&amp;apos;
窗体MyForm的Public定义了一个过程如SetData();
如何根据 s 来调用MyForm窗体的SetData()????
在另一个窗体的按钮触发事件,给个变量S,根据S调用窗体名为S的窗体方法。

你的意思是不是由S来指定你的窗口名字是什么啊?然后由S来调用 S里的 方法 SetData?
如果是这样的话,我帮你解决不了,好像前两天才有谈论到怎么根据一个字串值来
获得一个类的方法,高手们都说要用到 RTTI (运行时类型信息)方面的东东。
我还不大清楚(因为没有去做过)。。 :)
 
to darnis:
正是此意。
比如一个窗体模板MyForm,程序运行时根据需要会动态生成多个窗体,窗体名自动命名为MyForm_1,MyForm_2……
现在根据事件中s:='MyForm_1',我要调用MyForm_1的SetData方法。
 
那你的要求应该还不至于要到任何输入类名来创建相应的类的程度。
我觉得,你可以采取变向的解决方式,比如一个长长的 case 语句来分类处理。
(在事件里)
case s of
'MyForm_1':
// 创建 TMyForm_1.
..;
'MyForm_2':
// 创建 TMyForm_2..
..;
...
end;
 
to darnis:
呵呵,我现在已经这样先做了。但,别别扭扭的,被动。
给你一条链接,看看吧。
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1058202
 
呵呵,你这个应用用不了那么复杂的东西,这样:

TForm(Application.FindComponent(s)).SetData();
 
to beta:
我也试过,编译不通过
 
楼上兄弟的 TForm 当然应该换成你的 TMyForm(假设你继承了) 的,
否则当然通不过的。
还可以用 as 来转换成你当前的 Form 类。。
 
编译报什么错? 你的 MyForm 是如何定义的?
 

var
cFormClass:TformClass;


CFormClass:=TFormClass(FindClass(s));
with CFormClass.Create(Application) do
begin
show;
setData();
end;
 
to beta:
但是你昨天回答的TForm(Application.FindComponent(s)).show倒是可以。
///// unit TempletForm 是具有XP风格的窗体模板,U_MyForm是作为动态产生其他模板
unit TempletForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Menus, ComCtrls, ToolWin, Buttons, StdCtrls, AppEvnts,
LabelButton, TradeImage, MaskImageButton, MoveImageButton;
type
TModelFrom = class(TForm)


unit U_MyForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, TEMPLETFORM, ComCtrls, Menus, ToolWin, StdCtrls, ExtCtrls,
Buttons;
type
TMyForm = class(TModelForm)
public
procedure SetData();
/////另一窗体执行事件
procedure TMainForm.Button1Click(Sender: TObject);
var
s:string;
begin
inherited;
s:='MyForm_1';
//TForm(Application.FindComponent(s)).Show ;//该条正确执行
TForm(Application.FindComponent(s)).SetData();//编译:Undeclared identifier
end;
 
to hearpeek:
也是 Undeclared identifier
 
这样试一试:TMyForm(Application.FindComponent(s)).SetData();
 
谢谢各位,终于可以了。散发。分太少,见谅。
 
后退
顶部