procedure TForm1.btn1Click(Sender: TObject);
var Str:string;
begin
  Str:=Memo1.Text;
  with Memo1 do
  begin
    Caption:=Text
  end;
end;
上图是调试时显示的Memo1.Text值
上图是调试时显示with Memo1 do 后的Text值为什么会这样呢?大家可以试试,我用Delphi7

解决方案 »

  1.   

    其实第二个之所以显示为“Form1”,是因为编译器认为Self.Text,但真正赋值给Caption的却是正确的值“Memo1”,难道是这编译器的BUG吗?
      

  2.   

    很明显,这里的caption访问到了form1即窗口的属性,因为memo控件没有caption属性。
      

  3.   

    我觉得跟caption是谁的没关系,用鼠标指向变量时如果已经执行到这句,就会显示执行后的值,如没执行到这句,它就会估算 (用鼠标指的时候先显示出个单词evaluating)Caption:=Text;
    caption:='';//添加这句 随便一句不管什么都行吧,执行到这,再用鼠标指 就会变了
      

  4.   

    我感觉就是调试器不认With语句造成的
      

  5.   

    坚决不使用with,很容易把代码搞乱,把人搞糊涂。为了少打几个字得不偿失。何况有CtrlV,代码自动完成这些东东。
      

  6.   

    这是因为memo没有caption属性,就自动调用了self.caption.
      

  7.   

    老大,人家说的是TEXT,不是CAPTION。
    好好看看问题。
      

  8.   

    发现问题了,不用With语句,直接写个Caption := Text;看看这个Text,就明白了。
      

  9.   


    function TControl.GetText: TCaption;
    var
      Len: Integer;
    begin
      Len := GetTextLen;
      SetString(Result, PChar(nil), Len);
      if Len <> 0 then GetTextBuf(Pointer(Result), Len + 1);
    end;
    Text的返回值是TCaption,于是乎……
      

  10.   

    简单明了一个事情,doersoft都已经说到点了,还在这说,晕