看似简单的问题:有两个窗体共享一个变量的可能吗?(100分)

S

sghht

Unregistered / Unconfirmed
GUEST, unregistred user!
照你们说的:
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
i:integer;

implementation
uses unit2;
{$R *.DFM}

procedure TForm1.Button2Click(Sender: TObject);
begin
form2.Show;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
i:=1;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
edit1.text:=inttostr(i);
end;

end.

unit Unit2;

interface

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

type
TForm2 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.DFM}

procedure TForm2.Button2Click(Sender: TObject);
begin
close;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
edit1.text:=inttostr(i);
end;

procedure TForm2.Button3Click(Sender: TObject);
begin
i:=10;
end;

end.

不行
 
S

sghht

Unregistered / Unconfirmed
GUEST, unregistred user!
这样吧,我再想想办法,WIN98、DELPHI我已经重装过了。
 
X

xinglong

Unregistered / Unconfirmed
GUEST, unregistred user!
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }

end;

var
Form1: TForm1;
i: integer;

implementation
uses unit2;

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin

Caption := intTostr(i);
end;

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

procedure TForm1.Button3Click(Sender: TObject);
begin
i := 10;
end;

end.
++++++++++++++++++++++++++++++++++++++++++++++++++
unit Unit2;

interface

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

type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation
uses unit1;//注意这里

{$R *.DFM}

procedure TForm2.Button1Click(Sender: TObject);
begin
i := 2;
end;

end.
 

卷起千堆雪tyn

Unregistered / Unconfirmed
GUEST, unregistred user!
看看我的程序!怎么可能呢!!
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
a :Integer;

implementation

uses Unit2;

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
a :=1;
Edit1.Text :=IntToStr(a);
end;

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

end.



*****************


unit Unit2;

interface

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

type
TForm2 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

uses Unit1;

{$R *.DFM}

procedure TForm2.Button1Click(Sender: TObject);
begin
a :=10;
Edit1.Text :=IntToStr(a);
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
Form2.Close;
Form1.Edit1.Text :=IntToStr(a);
end;

end.
 
X

xinglong

Unregistered / Unconfirmed
GUEST, unregistred user!
To 提问者
要不你在“public”处定义,然后用在“Form2“里“Form1.i”引用或修改。
To 卷起千堆雪tyn
我们是不是没招了?
 

卷起千堆雪tyn

Unregistered / Unconfirmed
GUEST, unregistred user!
to xinglong :

我们的程序完全好用!!!
真不知道他在干什么!!!
 

白河愁

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个简单的办法,就是开一个隐形的控件,比如 TEDIT,然后把东西存进去不就行了?
 
P

pcexplorer

Unregistered / Unconfirmed
GUEST, unregistred user!
天那!
竟然有会问如此低能的问题!
看来提问者昨天刚学Delphi呀
这种问题方法有好多种
如果体会一下面向对象就
应该把两个单元用的同一个全局变量放到 unit3 中
然后unit1引用unit3,unit2引用unit3
这样多好,不会相互引用
我就经常用!!!
oh my god !!!
 
D

danliyou

Unregistered / Unconfirmed
GUEST, unregistred user!
to pcexplorer:
agree with you!!!
 
C

cfx

Unregistered / Unconfirmed
GUEST, unregistred user!
这不是很简单的吗!!!!
只要在PUBLIC里面定义了就行了!!!
你可以在另外的窗体中修改他
 
Y

ypluo

Unregistered / Unconfirmed
GUEST, unregistred user!
各位都将提问者的意思理解错了:
  他的意思应该是:在unit1中定义的变量值为1,在unit2中使用并改变其值为2
然后他要求在unit1中的变量值应仍为1,而不是2。

sghht是不是这个意思。

只不过感觉这没什么用,不如在unit2中用一个中间变量就行了。
 
X

xygz

Unregistered / Unconfirmed
GUEST, unregistred user!
如果是楼上说的意思,不理解这样要求有什么意义?
既然公用,一定会互相影响,如果记录已经改变的植,还不如另外定义一个变量.
我看得一头雾水
!@#..%$$!.
 
D

danliyou

Unregistered / Unconfirmed
GUEST, unregistred user!
那就分别在两个单元中定义嘛,
何必婆婆妈妈的。
哎................
 
T

tan_jian

Unregistered / Unconfirmed
GUEST, unregistred user!
我在想是不是应该开个初学者专栏论坛的每个富翁都必须给初学者回答问题(

比如3个问题/周,否则减分这样大家都好!
 
L

lbl20020123

Unregistered / Unconfirmed
GUEST, unregistred user!
这样做破坏了类TForm1的封装性
 
W

wangfu

Unregistered / Unconfirmed
GUEST, unregistred user!
是啊,怎么样来保护封装呢
 
Y

yfdciom

Unregistered / Unconfirmed
GUEST, unregistred user!
这太好办了,project/view source ,尽管定义好了,所有的单元均可以用
 

远帆

Unregistered / Unconfirmed
GUEST, unregistred user!
真是的,这样的问题有什么好问的?
自已看书就成,最最最基本的东西。
 
W

wingirl

Unregistered / Unconfirmed
GUEST, unregistred user!
可以
只要在PUBLIC里面定义了就行了!!!
 
Z

Z_JJ

Unregistered / Unconfirmed
GUEST, unregistred user!
我经常这样用啊,是很自然的还有什么疑问?
在unit1中使用的全局变量, 在unit2中uses unit1不就行了吗
 
顶部