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

H

HunterTeam

Unregistered / Unconfirmed
GUEST, unregistred user!
在unit1的public段定义i,在unit2的implementation下uses Unit1就一切ok!
 
F

fancy105

Unregistered / Unconfirmed
GUEST, unregistred user!
我來發表几句﹕
定義一個工程(程序)中各窗體共用的變量有多種方法﹕
第一種方法﹕定義在類的外面(也就是不屬于任意一個類)﹐它的存
取范圍是從它的定義開始到程序結束﹐代碼如下﹕
注﹕從這個方法可以看出﹐窗體的全局變量(只有全局變量才能賦初
值)就是程序的全局變量﹐只不過它的存取范圍受它的定義點位置限制。
unit Unit1;

interface

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

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

var
Form1: TForm1;
xx:String='aaa';

implementation

uses Unit2;

{$R *.DFM}

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

end.unit Unit2;

interface

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

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

var
Form2: TForm2;

implementation

uses Unit1;

{$R *.DFM}

procedure TForm2.FormCreate(Sender: TObject);
begin
caption:=xx;
end;

end.

第二種方法﹐也是最常用的方法。就是將公用變量定義在一個通用單元中﹐
在要使用的的單元中Uses這個單元就可以了。

第三種方法﹐頂樓已經說過了﹐也就是定義一個窗體的公用變量(在Public域中)﹐
這要可以達到公用的目的﹐不過引用時要加窗口類變量前綴。

第四種辦法﹕在特殊的情況下﹐可以使用函數參數傳遞的方法﹐使不同的單元共亨
一個變量﹐就是在函數的參數前加Var關鍵字﹐表示參數為地址引用。

順便評一句﹕
在C++中變量的定義十分隨便﹐變量定義隨處丟下就是(夸張了一點)﹐
而且可以在定義時賦初值(不管是局部變量還是全局變量)﹔
而在Delphi變量的定義嚴格地由關鍵字Var引出﹐沒有Var的地方就不能定義變量﹐
不過Delphi這樣規范對我們編程有好處。
 

远帆

Unregistered / Unconfirmed
GUEST, unregistred user!
看似简单的问题,
再看一下,还是一个简单的问题:)
 
S

sharejoy

Unregistered / Unconfirmed
GUEST, unregistred user!
lbl20020123说得对,这样做的确不好。
在下与远帆的看法不同:这也许是个小问题,但却是软件工程中不可忽略的问题。在稍大规模的开
发中,会引发严重问题。这不是如何书写代码的问题,而是设计思想有待清理。

建议:
1 首先分清哪些量是常量,哪些量是变量。若你需要某个值不变,就请明确定义它为常量。
2 其次搞清楚变量的作用范围。若某个变量被一个以上的模块(单元或类),请在专门的单元
(公共单元)中定义它。
3 维护类的封装性。若某个对象的数据成员需要被其它模块引用,请为之定义属性。

据在下对贴主意思的理解,解决引问题应遵循上述第2条。
 

夜风

Unregistered / Unconfirmed
GUEST, unregistred user!
有,把变量声明为全局变量
 
X

xiaogew

Unregistered / Unconfirmed
GUEST, unregistred user!
浪费时间
 
H

HANFI

Unregistered / Unconfirmed
GUEST, unregistred user!
许久以前,听说是增加一个 TDataModule 将用到变量增加到这里面(包括初始化)不只各位做过么?
据说有很多的好处
 
F

fengyaxuan

Unregistered / Unconfirmed
GUEST, unregistred user!
用 全局变量 全局变量 全局变量 全局变量 全局变量 全局变量 全局变量 全局变量
全局变量 全局变量 全局变量 全局变量 全局变量 全局变量 全局变量 全局变量

新建一个单元 取名为share
在此单元中定义一全局变量I

在unit1中use share
在unit2中use share

哈哈,这就样就行了
 
S

smokingroom

Unregistered / Unconfirmed
GUEST, unregistred user!
下面是总结出来的一点小经验,与大家交流交流:
在dephi中,变量的声明表面上来看很随意,几乎在任何地方都可以声明,但它们的作用域却是
不同的.
1.窗体级的变量:
在窗体声明中的Private或Public中声明,这其实是将变量与窗体绑定在一起了,Private
中声明的只能供窗体本身使用,public中的能够让让共它单元通过该单元,并指定窗体名称来
访问.但无论在private还是在Public中声明,都必须在该窗体创建后才能访问,否则将引发异常.
2.单元级变量.
在单元的implementation之后声明.该处声明的变量,能够供该单元任一地方使用,但无法
在别的单元访问它.
3.程序级变量(全局).
在单元的interface与implementation之间声明即可. 这些变量能够在程序中任一地方使用,
但使用它的单元必须要在uses中引用该单元.

 
N

net_z

Unregistered / Unconfirmed
GUEST, unregistred user!
在子窗体定义不就行了。

....
var
i :Integer;

implementation


{$R *.DFM}
....
 
P

Passion

Unregistered / Unconfirmed
GUEST, unregistred user!
初级问题。
 
S

smhpnuaa

Unregistered / Unconfirmed
GUEST, unregistred user!
全局变量

 
S

spymaster

Unregistered / Unconfirmed
GUEST, unregistred user!
这么简单的问题
连我都会!
 

老人家

Unregistered / Unconfirmed
GUEST, unregistred user!
请版主把分分了把,无聊的问题
 
O

owangqiang

Unregistered / Unconfirmed
GUEST, unregistred user!
每一个变量都有自己的内存空间。
当在Form1中定义全局变量时,它的内存空间将在主窗体释放时释放。
当Form2使用变量i时,如果它没有,则使用全局变量。所以,当你在Form2中改变变量i后,Form1再调用,i的值就变了。
建议使用多个变量。
 
S

sunshine_zk

Unregistered / Unconfirmed
GUEST, unregistred user!
没有搞错吧!!无聊的问题。
 
N

ndch

Unregistered / Unconfirmed
GUEST, unregistred user!
看得我一头雾水。。。
 
F

fssky

Unregistered / Unconfirmed
GUEST, unregistred user!
别看了,分分吧!
 
顶部