两个小问题:窗口关闭,传参数(100分)

  • 主题发起人 主题发起人 seagull007
  • 开始时间 开始时间
S

seagull007

Unregistered / Unconfirmed
GUEST, unregistred user!
1.普通窗体的关闭在From的Close事件中写: &nbsp;FreeAndNil(frm);<br>子窗体在From的Close事件中写 &nbsp; Action := CaFree; FreeAndNil(frm);<br>这样写关闭事件对不对<br><br>2.delphi中传参数分值传递,引用传递,在什么情况用值传递,在什么情况下用引用传递,<br>下面是我写的一个引用传递:为啥edit2.text的值还是3,引用传递不是说会改变参数的值吗<br>function TForm1.test(var a: integer): Integer;<br>begin<br>&nbsp; result := a*2;<br>end;<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>var i:integer;<br>begin<br>&nbsp; i := 3;<br>&nbsp; edit1.text := inttostr(test(i));<br>&nbsp; edit2.text := inttostr(i);<br>end;
 
1.From的Close事件中不用写,因为释放是内部编译的!<br><br>2. function TForm1.test(var a: integer): Integer;<br>begin<br>&nbsp; result := a*2; // a没有变啊!<br>&nbsp; // 应该是<br>&nbsp; a:=a*2;<br>&nbsp; result:=a;<br>end;
 
我看了我们的程序在Form的Close中都写了代码的,有没有一个大概的规律什么时候用值传递,什么时候用引用传递哦,我平时都用值传递,<br>这是别人写好的一个创建窗体的代码:用了引用传递,不用引用传递可以吗<br>procedure TfrmMain.CreateSubForm(InstanceClass: TComponentClass; var Reference: TForm);<br>begin<br>&nbsp; if not Assigned(Reference) then<br>&nbsp; &nbsp; Application.CreateForm(InstanceClass, Reference)<br>&nbsp; else<br>&nbsp; &nbsp; Reference.BringToFront;<br>&nbsp; Reference.Top := 2;<br>&nbsp; Reference.Left := 2;<br>&nbsp; Reference.Width := Width - dxSideBar1.Width - 15;<br>&nbsp; Reference.Height := Height - CoolBar1.Height - StatusBar1.Height - 60;<br>&nbsp; Reference.Show;<br>end;
 
要修改对象的值并返回就使用引用,对于复杂对象(tform),不需要指定var,如果是简单类型(必如integer ,float,array)需要指定var,如果不希望修改对象的值就使用传值
 
唉,有点抽象哦,
 
没得高手进来指点一下吗
 
Pascal中的参数传递分两种形式,<br>一、值参 function a(a: Integer): Integer;<br>二、变参 function a(var a: Integer): Integer;<br><br>值参传递方式只是传递参数的值给函数,函数内部会创建一个临时地址给这个参数,那么这种传递方式在函数体里面改变参数的值的话,并不影响别的地方<br><br>而变参传递方式则是传了变量的地址给函数,那么也就是说,当在函数里面改了参数的值的话将会影响到调用者或更多地方,和全程变量相似<br><br>至于什么地方用地址传递,看需求来的,比如我有一个函数,需要返回几个信息,那么就可能要用到变参的方式了,具体你可以看看WINDOWS API中的函数,其中ReadFile就是一个了,这个函数有三个返回信息,一个是读到的内容,一个是返回实际读取的字节数,返回值是函数是否调用成功。<br><br>如果你的函数只需要返回一个信息的话,那就不需要用地址传递了
 
多人接受答案了。
 
后退
顶部