本人刚写程序
1:我想了解一下代码如何使其安全性,哪些窗体需要FREE掉,例如像MDI窗体中的模式窗体,不FREE掉也可以,FREE掉有什么作用?还用一些控件动态生成的例子:MyTemp:=Tadoquery.Create(self/nil):这两种对比结果如何?是不是一样的,只要将self的FREE掉结果一样。
2:(Sender:Tobject)中的Sender的明确作用是什么?owner和parent有什么区别?
  TempForm:=Ttempform.Create(self/application):中建立窗体有什么区别?各位大侠如何知道的请帮帮小弟,能答多少的则答多少?谢谢!!! 

解决方案 »

  1.   

    另:combobox.items.add和combobox.items.append都好像没有什么区别呀?那它们有什么作用?
      

  2.   

    1.MDI及模式窗体要free掉,一般动态创建的都要free,其可节省资源,而且下次创建时不会造成冲突;self/nil为当前控件之宿主,self的可由窗体free,即可不用手工去free当宿主窗体free后其也自动free,而nil的则要手工去free;
    2.Sender为当前执行命令的对象,你可在其事件中查其ClassName;owner与parent区别是owner是拥有者(宿主),而parent为显示其上者;若button1这owner为form1,parent为form2,则其会在form2上显示,但当form窗体free后button1不复存在;self/application区别是self以当前对象(如窗体)为宿主,application以工程为宿主,其为全局性的
    3.combobox.items.add会返回一个行号,而combobox.items.append只完成添加动作而无行号
      

  3.   

    MyTemp:=Tadoquery.Create(self/nil);
    如果是nil ,那么需要程序员自己释放资源
    其它的都有程序自动释放
    -----------
    MDI窗体中的MDIChild窗体,不用Free,而是Close里面写Action:=caFree;
    ---------
    Sender 只是个参数,一般是系统负责传递,表示当前对象
    如: Button1Click(Sender :Tobject)
    begin
      showmessage((Sender as TButton).Name); //可以多个Button共用这一个事件
    end
    -----------
    owner代表所有者,parent是谁负责显示
    ----------
    TempForm:=Ttempform.Create(self/application):
    此时self代表当前窗体
    application代表程序是窗体TempForm的所有者
    -------------
    combobox.items.add和combobox.items.append 没区别
    实际的代码
    combobox.items.add
    function TStrings.Add(const S: string): Integer;
    begin
      Result := GetCount;
      Insert(Result, S);
    end;
    ------
    combobox.items.append 
    procedure TStrings.Append(const S: string);
    begin
      Add(S);//就是TStrings.Add ,换了名字而已
    end;
      

  4.   

    procedure TForm2.FormDestroy(Sender: TObject);
    begin
      form2:=nil;
    end;
    此窗体是MDI子窗体,我想问一下这句话是什么意思,到底有什么作用?(我知道的是片面就是窗体消失时将其指针为零对不对,但是我不知道有什么作用?)
      

  5.   

    再创建时,If not Assigned(Form2) then... 若不nil,其就认为是Assigned而不能再建,是这样啊