勒石 發表於 2019-5-6 13:11:00

delphi assigned函数的用法

<pre>if not Assigned(Modeless) then Assigned()什么意思!</pre>
<p>&nbsp;</p>
<p>assigned 是用来判断某一指针(pointer)或过程引用是否为nil(空),如果为空则返回假(false)。</p>
<p>&nbsp;</p>
<p>用法示例(防止窗体被实例化多次):</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>unit Unit1;</p>
<p>&nbsp;</p>
<p>interface</p>
<p>&nbsp;</p>
<p>uses</p>
<p>&nbsp;&nbsp;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,</p>
<p>&nbsp;&nbsp;Dialogs, StdCtrls;</p>
<p>&nbsp;</p>
<p>type</p>
<p>&nbsp;&nbsp;TForm1 = class(TForm)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;Button1: TButton;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;procedure Button1Click(Sender: TObject);</p>
<p>&nbsp;&nbsp;private</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;{ Private declarations }</p>
<p>&nbsp;&nbsp;public</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;{ Public declarations }</p>
<p>&nbsp;&nbsp;end;</p>
<p>&nbsp;</p>
<p>var</p>
<p>&nbsp;&nbsp;Form1: TForm1;</p>
<p>&nbsp;</p>
<p>implementation</p>
<p>&nbsp;</p>
<p>uses Unit2;</p>
<p>&nbsp;</p>
<p>{$R *.dfm}</p>
<p>&nbsp;</p>
<p>procedure TForm1.Button1Click(Sender: TObject);</p>
<p>begin</p>
<p>&nbsp;&nbsp;if (Not assigned(form2)) then</p>
<p>&nbsp;&nbsp;begin</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;form2:=Tform2.Create(Self);</p>
<p>&nbsp;&nbsp;end;</p>
<p>&nbsp;&nbsp;form2.show;</p>
<p>end;</p>
<p>&nbsp;</p>
<p>end.</p>
<p>&nbsp;</p>
<p>-----------------------</p>
<p>unit Unit2;</p>
<p>&nbsp;</p>
<p>interface</p>
<p>&nbsp;</p>
<p>uses</p>
<p>&nbsp;&nbsp;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,</p>
<p>&nbsp;&nbsp;Dialogs;</p>
<p>&nbsp;</p>
<p>type</p>
<p>&nbsp;&nbsp;TForm2 = class(TForm)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;procedure FormClose(Sender: TObject; var Action: TCloseAction);</p>
<p>&nbsp;&nbsp;private</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;{ Private declarations }</p>
<p>&nbsp;&nbsp;public</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;{ Public declarations }</p>
<p>&nbsp;&nbsp;end;</p>
<p>&nbsp;</p>
<p>var</p>
<p>&nbsp;&nbsp;Form2: TForm2;</p>
<p>&nbsp;</p>
<p>implementation</p>
<p>&nbsp;</p>
<p>{$R *.dfm}</p>
<p>&nbsp;</p>
<p>procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);</p>
<p>begin</p>
<p>&nbsp;&nbsp;Action:=caFree;</p>
<p>&nbsp;&nbsp;form2:=nil;&nbsp;&nbsp;//这句比较重要,窗体被释放时,窗体变量并不会自动变空</p>
<p>end;</p>
<p>&nbsp;</p>
<p>end.</p>
<p>&nbsp;</p>
<p>很详细呢,不过不是我的原创,我转的,希望对你有用啦。。。。。</p>
<p>&nbsp;</p>
<p>另一篇网络文章</p>
<div>关于Delphi中的Assigned</div>
<div>2008-04-05 10:53</div>
<p></p>
<table>
<tbody>
<tr>
<td>
<div>关于Delphi中的Assigned</div>
<div>&nbsp;</div>
<table>
<tbody>
<tr>
<td>function Assigned(var P): Boolean;<br><br>Description<br><br>Use Assigned to determine whether the pointer or procedure referenced by P is nil. P must be a variable reference of a pointer or procedural type. Assigned(P) corresponds to the test P&lt;&gt; nil for a pointer variable, and @P &lt;&gt; nil for a procedural variable.<br><br>Assigned returns False if P is nil, True otherwise.<br><br>检查指针指向的参考变量或过程是否为nil<br><br>每次我通常的处理方法都是:<br><br>if assigned(frm) then frm.close;&nbsp;&nbsp;&nbsp;&nbsp;但是当下次调用时就会出错。为什么呢,直到咋天我才知道原因<br><br>frm.close;frm.free;&nbsp;&nbsp;&nbsp;只是指定这块内存可以重写,并未释放为NIL 因此当下次调用时即使frm.free已经<br><br>执行过assigned(frm)仍为TRUE;<br><br>正确的处理方法:<br><br>if assigned(frm) then<br>begin<br>&nbsp;&nbsp;&nbsp;&nbsp;frm.close;<br>&nbsp;&nbsp;&nbsp;&nbsp;frm:=nil;<br>end;<br><br>或:<br><br>if assigned(frm) then<br>begin<br>&nbsp;&nbsp;&nbsp;frm.close;<br>&nbsp;&nbsp;&nbsp;freeandnil(frm);<br>end;<br><br>freeandnil的说明:<br><br>procedure FreeAndNil(var Obj);<br><br>Description<br><br>Use FreeAndNil to ensure that a variable is nil after you free the object it references. Pass any variable that represents an object as the Obj parameter.<br><br></td>

</tr>

</tbody>

</table>

</td>

</tr>

</tbody>
</table>

</div>
<div id="MySignature" role="contentinfo">
    好的代码像粥一样,都是用时间熬出来的<br><br>
来源:https://www.cnblogs.com/jijm123/p/10818999.html
頁: [1]
查看完整版本: delphi assigned函数的用法