关于局部变量和全局变量的问题(100分)

  • 主题发起人 主题发起人 FoxSky
  • 开始时间 开始时间
F

FoxSky

Unregistered / Unconfirmed
GUEST, unregistred user!
我写了一个统计文档的英文字符和汉字字数的程序,在运行时碰到了一个关于变量
的问题:我在一个窗体上,创建一个Tmemo,两个Tlabel(用来显示字数),一个Tbutton
(用来统计字数);再在var中定义变量:ch(汉字字数),en(英文字数);s:string(文档
文本);可以正常统计字数。但是,我把程序稍稍改进:点击button后弹出一个新窗体,
在新窗体上显示字数,却碰到显示字符为0的情况,我估计是变量的问题,却不知具体
错在哪,希望各位能帮帮忙,急啊!!!
 
需要你的源代码
你的var定义在那里,form类定义中?函数中?还是全部变量var中?
各有不同用法
 
你的妹儿?我发一个给你。
 
你引用以下单元就可以了
 
应该把统计数字做为全局的变量就应该可以了。。
 
你把程序贴出来,我们帮你看, OK!!!
 
全局变量应该放到单元的定义VAR中,而不是放到过程中的VAR下。
 
引用单元也不行吧。全局变量只是在那个form中有用。
你可以在form2中写一个过程序,
procedure TForm2.showNom(Nomber1:Integer;Nomber2:integer);
begin
label1.caption:=IntToStr(nomber1);
label2.caption:=IntTostr(Nomber2);
end;

在form1中
uses
unit2;
procedure TForm1.button1click(Sender:TObject);
begin
……
shownom(ch,en);
end;
 
var s:string;
I,e,c:integer;
begin
s:=memo1.text;
e:=0;c:=0;
for I:=1 to length(s)do
begin
if (ord(s)>=33)and(ord(s)<=126) then
begin
inc(e);
form2.label1.caption:='英文字数:'+inttostr(e);
end
else
if (ord(s)>=127) then
begin
inc(c);
form2.label2.caption:='中文字数:'+inttostr(c div 2);
end;
end;
form2.show;
end;
 
把number1,number2改成
form1.number1
form1.number2
就ok了。
 
风中流云兄的方法很好,但是我还是想弄清楚我的程序错在哪?以后就不会再犯
相同的错误了。我把程序代码帖出来,希望各位能再帮帮忙。先在此谢过了。
var
MainFrm: TMainFrm;
FileName: string;
i,ch,en: integer;
s :string;
implementation
uses UnitInfo;
//第二窗体

procedure TMainFrm.ToolFileMsgItemClick(Sender: TObject);
begin
ch:=0;
en:=0;
s:=MainFrm.Editor.Text;
for i:=1 to length(s)do
begin
if (ord(s)>33) and (ord(s)<127)
then
en:=en+1
else
ch:=ch+1;
end;
label1.Caption:=inttostr(en);
InfoForm.ShowModal;
end;

第二窗体代码:
implementation
uses Main;
{$R *.DFM}
procedure TInfoForm.FormCreate(Sender: TObject);
begin
label3.Caption:=inttostr(en);
label4.Caption:=inttostr(round(ch/2));
end;
 
第二个窗体创建时, 第一个窗体还没初始化呢. 不信你把第二窗体里的里的
从Create实践里移到一个按钮里试试,
 
delphi的我不清楚,bcb中可以建一个unit,然后在h文件中声明,在cpp实例化
 
同意tseug.
你可以把第二窗体的FormCreate中代码移到FormActive中
 
多人接受答案了。
 
后退
顶部