===============这是正确的代码=======================
procedure TForm1.Button1Click(Sender: TObject);
begin
  with OpenDialog1 do
  with RichEdit1 do
  if Execute then   //OpenDialog1
  begin
    Lines.LoadFromFile(FileName);
    FFileName := FileName;
    SetFocus;
    Modified:=False;
  end;
end;===============疑问=====================
用了两个:
  with OpenDialog1 do
  with RichEdit1 do
我不明白的是:
系统怎么会知道,Execute 用OpenDialog1,
而又是怎么会知道:SetFocus 是用RichEdit1的请高人指点一,二

解决方案 »

  1.   

    with...do 是对record类型进行赋值的语句,你这种情况是对2重record类型的变量进行赋值,是按照顺序执行的,也有这种方式:with OpenDialog1 RichEdit1 do 然后进行赋值的.
      

  2.   

    还不是很理解!我就是不明白:Execute 是用OpenDialog1而:Lines.LoadFromFile 是用 RichEdit1下面的次序是乱的啊?到底它有什么实现的呢?
      

  3.   

    顺序没有乱
    with OpenDialog1 do
      with RichEdit1 do
      if Execute then 
     OpenDialog1在前面,后面的RichEdit1和它的类型相同
     赋值的时候
     Execute在前面
    SetFocus  在后面
    我是这么理解的,互相讨论一下~~~
      

  4.   

    但从这些语句:
      if Execute then
      begin
        Lines.LoadFromFile(FileName);
        FFileName := FileName;
        SetFocus;
        Modified:=False;
      end;调用顺序:
    Execute(OpenDialog1)
    Lines.LoadFromFile(RichEdit1)
    FileName(OpenDialog1)
    FileName(OpenDialog1)
    SetFocus(RichEdit1)
    Modified(RichEdit1)它的调用没有规则的!
    怎么会有先有后呢?
      

  5.   

    begin
        Lines.LoadFromFile(FileName);
        FFileName := FileName;
        SetFocus;
        Modified:=False;
      end;
    都是RichEdit1的赋值 
    只有Execute 是OpenDialog1
      

  6.   

    我明白了!
    因为这些被调用的方法都是两个类个自事先定义好的!用with ... do只是使程序简略而已!所以当用到这个方法时,他就自动会去检测,该方法的类有没有被with .. do 定义过应该是这样吧!!!!