with form1,form2 do begin
  edit1.text='1';
  edit2.text='2';
  ……
end;
我发现如果begin end之间的语句很多的话(我写了15个类似的语句),会非常慢。
但是去掉一个(比如去掉form2),然后把里面需要用到form2的地方加上form2,速度就非常快了。
我的问题是with这样的语句是如何确定edit1是from1还form2的?
//不用告诉我form1里没有就到form2里去找,我想知道他是如何确定的。
难道这件事要等到执行的时候才判断?

解决方案 »

  1.   

    with 能不用就不用不是个好东西
      

  2.   

    呵呵,DWGZ() 你够快的呀。
    不过我还是喜欢用,方便呀。
      

  3.   

    我觉得with还是有很多好处的,代码书写量会少一些,但我提议不要with ..,..,do 中间有一个对象最好了,要不然程序的清晰度会大大降低
      

  4.   

    我觉得with不爽,不喜欢用
    不方便读程序
      

  5.   

    我的问题是with这样的语句是如何确定edit1是from1还form2的?
      

  6.   

    如果两个窗体都有Edit1,这个Edit1属于后者!~
    你这里的Edit1属于Form2的!·
      

  7.   

    with实际上是有利于delphi优化的。但是楼主的写法并不太好,尽量在with后使用一个对象。
      

  8.   

    代码优化问题!
    它得先去判断  edit1.text='1';
      edit2.text='2';
    是在哪个Form里边,再去执行,而且有个先后顺序问题!
      

  9.   

    各位大哥,我想讨论的是with是如何确定edit1是from1还form2的。
    是在编译的时候,还是在运行的时候,根据我的直觉,应该是在运行时判断的。
    那么这个和多态有类似的地方吗?我觉得应该没有。那么他是如何判断的呢?
    不知道我说明白了没有。
    楼上的所有朋友,你们的答案都是我意料之中的,大概是我的表达不清楚。不知道这样说,我的表达是否清楚了。
      

  10.   

    with实际上是有利于delphi优化的。尽量在with后使用一个对象。
      

  11.   

    我提倡用with...do方面明了,又有利于Delphi的性能!!!
      

  12.   

    虽然with不利于程序阅读,但比单个单个写执行速度快,建议使用with语句
      

  13.   

    最好不要用With,程序多维护非常难
    如:
    with form1,form2 do begin
      edit1.text='1';
      edit2.text='2';
      ……
    end;
    form1,form2都有edit1的话,
    edit1.text='1';到底是给哪个Form的edit1赋值,这里代码少了还可以看一下,行数多了又怎么看,自己都糊涂了
      

  14.   

    with是个好东西,可以提高执行速度,优化程序结构。
    再好的东西,用滥了就不好了,正如酒是好东西,喝多了也伤身。
    最好不要用With Form1,... do
      或
      with form1  do
         with form2 do
    这种嵌套的用法
      

  15.   

    是啊,尽量只对一个对象来使用WITH比较好。
      

  16.   

    with是一柄双刃剑,用的好你的代码看起来简单清晰,用得不好,自己的代码自己看就胡涂,更加不用说别人了,所以,建议楼主,在这个问题上可以放弃讨论
    本来如果不使用with,变量是需要两次寻址的,所以,在使用with的情况下似乎更能够提高效率,但是若如楼主所做的那样,我猜想:Delphi应该是分别在form1和form2之后直接加上偏移,然后分别找出是谁的Edit1,否则,真的是没有办法知道是with谁的东西了,(注意他的查找顺序是从后向前)所以,如果是这样的用法:
    with form1,form2 do
    begin
     edit1.text:='1'//那么此处应该是form2的edit1,即使form1也有edit1
    end
    我的浅论,见笑
      

  17.   

    同意楼上的意见!
    with是一柄双刃剑,
      

  18.   

    如果With 有两个对象的话,应该是在运行时判断的;两个对象的成员可能发生变化,如动态增删Form里的控件。