关于with....do语句的问题

Aunura 2017-09-04 10:57:32
初学delphi,只能在网上找例子摸索

在网上找到一段调整TStringGrid高的语句:

{单元高-}
procedure TForm1.Button4Click(Sender: TObject);
begin
TButton(Sender).Caption := '单元高-';
with StringGrid1 do
RowHeights[Row] := RowHeights[Row] div 2;
end;

之后又查了下with do的用法,发现是个省略调用对象的循环,我试着把它改写为我之前学过的调用方法

with StringGrid1 do
RowHeights[Row] := RowHeights[Row] div 2;
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
StringGrid1.RowHeights[Row] :=StringGrid1. RowHeights[Row] div 2;




此时会提示Undeclared indentifier Row,这是什么原因呢





...全文
1382 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
doloopcn 2017-09-12
  • 打赏
  • 举报
回复
row这个变量从何而来,你在哪里有定义? 编译器提示的就是ROW没有定义
Aunura 2017-09-07
  • 打赏
  • 举报
回复
首先谢谢在座各位的解答
引用 4 楼 DelphiGuy 的回复:
这么写 with StringGrid1 do RowHeights[Row] := RowHeights[Row] div 2; 这里Row的作用域是StringGrid1,而TStringGrid确实有Row属性,所以你没定义Row也是正确的。 而这么写 StringGrid1.RowHeights[Row] :=StringGrid1. RowHeights[Row] div 2; Row的作用域是TForm1.Button4Click,而该过程中没有定义Row,当然就出错了。
请问如果我不用with....do语句,如何把作用域转到StringGrid1里面呢
  • 打赏
  • 举报
回复
那当然就是StringGrid1.RowHeights[StringGrid1.Row] :=StringGrid1. RowHeights[StringGrid1.Row] div 2;
  • 打赏
  • 举报
回复
这么写 with StringGrid1 do RowHeights[Row] := RowHeights[Row] div 2; 这里Row的作用域是StringGrid1,而TStringGrid确实有Row属性,所以你没定义Row也是正确的。 而这么写 StringGrid1.RowHeights[Row] :=StringGrid1. RowHeights[Row] div 2; Row的作用域是TForm1.Button4Click,而该过程中没有定义Row,当然就出错了。
hongss 2017-09-04
  • 打赏
  • 举报
回复
StringGrid1.Row
lyhoo163 2017-09-04
  • 打赏
  • 举报
回复
错误是你没有设置Row的值。 Row是指定的行,你要通过一个循环,让Row 有具体的值。 实现全部行的调整高度:
var i,Row:integer;
with StringGrid1 do
begin
  for Row:=0 to StringGrid1.RowCount-1 do
     RowHeights[Row] := RowHeights[Row] div 2;
end;
jjpweb 2017-09-04
  • 打赏
  • 举报
回复
路过。。。。。。。。。。。。。。。。。。。。

5,386

社区成员

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

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