***类的问题***(30分)

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

gbyahoo

Unregistered / Unconfirmed
GUEST, unregistred user!
奇怪,我在FORM2有我自己一个类A,当我在form1给form2中的a.s1属性设值,
然后在form1中查看成功是刚才设的值,
可我想要在form2 中的a类oo过程中调用this.s1的值为空,为什么是空的呢
 
你没有创建一个class A的实例吧!?
 
有的,在form1有创建a的实例,如果没有它会出错地址错误
 
拉出来看看先……
 
在form1中是这样的
tempclass:=Ta.Create;
tempclass.s1:=Edit1.Text;
程序在运行上先给tempclass.s1设值
在form2中的A类
private
s1:string;
published
property <-略
最后当我在form2中的类A的过程oo读入值时就是空的,

是不是s1的值是无法长期保存的
 
把s1改为public
 
不是的,我在published
property s:string ....略
所以我在form1中tempclass.s:=Edit1.Text;这样的,

上面写错了
 
你的
property s: string....
是不是 property s: string read s1 write setS;
setS是不是:
procedure TA.setS(int1: integer);
begin
.............
end;
 
如果是,那么象这样改:
unit unit2
...............
............
var
form2: TForm2;
TempClass: TA;
implementation
...........
///

unit unit1
...........
...........
var
form1: TForm1;
implenmentation
uses unit2;
................
...............
procedure ......
...
begin
....
c1 := TA.Create;
c1.s := Edit1.Text;
.....
end
....
搞定!
 
写错了,c1 改为 TempClass
 
不是我在procedure TA.setS(int1: integer);
begin
用showmessage显示数值正常, .............
end;
procedure TA.oo;
可过程读s1时就没有数据.
 
我明白了,你是把类当成对象了。对象是类的实例啊,对象1的值怎么能赋给类呢?类只是一
个抽象,对象才执行实际动作。看看这个:
unit Unit2;

interface

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

type
TForm2 = class(TForm)
Label1: TLabel;
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

type
TA = class
private
s1: string;
procedure setStr(str: string);
published
property s: string read s1 write setStr;
end;

var
Form2: TForm2;
c1: TA;
implementation

{$R *.dfm}

procedure TA.setStr(str: string);
begin
s1 := str;
end;



procedure TForm2.FormShow(Sender: TObject);
begin
label1.Caption := c1.s;
end;

end.
////
unit Unit1;

interface

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

type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
Edit1: TEdit;
BitBtn2: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
uses unit2;
{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
c1 := TA.Create;
c1.s := Edit1.Text;
ShowMessage(c1.s);
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
Form2.Show;
end;

end.

 
可是我是在form2中有别一个实例被创建了,就Ta.S1就没有值了,

上面你这个代码是在form2把定义个TA然后在FORM1中操作,后又在FORM2中查看原有的定义的
C1那一定是有的,与在form1中定义TA为c1一样,也就是在同一个对象中操作,想的问题是想在
不同对象中操作时取TA.s1它的值不变的,
 
不是说了吗,类不是对象,它只是一个数据结构,它跟string, integer差不多,
你可以:str: string = 'sss', int1 : integer = 11;
但是你不能给string, integer赋值,同理你不能给类赋值。
所以你在不同的对象中怎么能实现你想的那种操作呢?
 
这个我知道,但问题是能不能用别一种方法去实现我的想法呢,你的QQ多少,
 
接受答案了.
 
后退
顶部