关于with ... do 的问题?

almims 2007-04-14 02:20:43
===============这是正确的代码=======================
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的

请高人指点一,二
...全文
132 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
liujs67 2007-04-14
  • 打赏
  • 举报
回复
是的!
almims 2007-04-14
  • 打赏
  • 举报
回复
我明白了!
因为这些被调用的方法都是两个类个自事先定义好的!

用with ... do只是使程序简略而已!

所以当用到这个方法时,他就自动会去检测,该方法的类有没有被with .. do 定义过

应该是这样吧!!!!
liujs67 2007-04-14
  • 打赏
  • 举报
回复
begin
Lines.LoadFromFile(FileName);
FFileName := FileName;
SetFocus;
Modified:=False;
end;
都是RichEdit1的赋值
只有Execute 是OpenDialog1
almims 2007-04-14
  • 打赏
  • 举报
回复
但从这些语句:
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)

它的调用没有规则的!
怎么会有先有后呢?
liujs67 2007-04-14
  • 打赏
  • 举报
回复
顺序没有乱
with OpenDialog1 do
with RichEdit1 do
if Execute then
OpenDialog1在前面,后面的RichEdit1和它的类型相同
赋值的时候
Execute在前面
SetFocus 在后面


我是这么理解的,互相讨论一下~~~
almims 2007-04-14
  • 打赏
  • 举报
回复
还不是很理解!

我就是不明白:Execute 是用OpenDialog1

而:Lines.LoadFromFile 是用 RichEdit1

下面的次序是乱的啊?到底它有什么实现的呢?
liujs67 2007-04-14
  • 打赏
  • 举报
回复
with...do 是对record类型进行赋值的语句,你这种情况是对2重record类型的变量进行赋值,是按照顺序执行的,也有这种方式:with OpenDialog1 RichEdit1 do 然后进行赋值的.

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧