标准写法:
TV:TTreeView;
  if Assigned(TV.Selected) then
    if TV.Selected.Text = 'a' then
    begin
    //...............
    end;但这样用也不出错:  if Assigned(TV.Selected) and (TV.Selected.Text = 'a') then
  begin
  //.............................  end;是不是Delphi判断 and 前面的不成立就不执行后面的了?
这种用法是否安全?

解决方案 »

  1.   

    delphi的调试选项里可以选你这种情况,具体在那里忘记了,身边没有delphi一般默认是前面成立就不看后面的好象
      

  2.   

    对呀,前者和后者有区别的,后者是只要有一个false就停止了,前者是顺序判断
      

  3.   

    if Assigned(TV.Selected) and (TV.Selected.Text = 'a') then
      begin
      //.............................  end;//安全的~~
    //测试如下代码~~procedure TForm1.Button1Click(Sender: TObject);
    begin
      {$B-}
      if (MessageDlg('1', mtWarning, [mbYes, mbNo], 0) = mrYes) and
        (MessageDlg('2', mtWarning, [mbYes, mbNo], 0) = mrYes) and
        (MessageDlg('3', mtWarning, [mbYes, mbNo], 0) = mrYes) and
        (MessageDlg('4', mtWarning, [mbYes, mbNo], 0) = mrYes) and
        (MessageDlg('5', mtWarning, [mbYes, mbNo], 0) = mrYes) then ;
      {$B+}
      if (MessageDlg('*1', mtWarning, [mbYes, mbNo], 0) = mrYes) and
        (MessageDlg('*2', mtWarning, [mbYes, mbNo], 0) = mrYes) and
        (MessageDlg('*3', mtWarning, [mbYes, mbNo], 0) = mrYes) and
        (MessageDlg('*4', mtWarning, [mbYes, mbNo], 0) = mrYes) and
        (MessageDlg('*5', mtWarning, [mbYes, mbNo], 0) = mrYes) then ;
    end;//Delphi中默认为$B-