【问题标题】:How to call procedure with multiple parameters? [closed]如何调用具有多个参数的过程? [关闭]
【发布时间】:2013-12-22 21:55:55
【问题描述】:

我有这个代码:

edit5.Text := IntToStr(j);
rw := j;
myRect.Left := 0;
myRect.Top := rw;
myRect.Right := 5;
myRect.Bottom := rw;
stringGrid1.Selection := myRect;
edit1.SetFocus;

我必须重写这段代码,因为我将它用于许多事件(事件button1clickbutton2click,每次我验证) 所以我的意思是把它变成程序,所以我可以在很多情况下调用它 到目前为止我制作的这段代码:

procedure highlight(edit1, edit5: TEdit; myrect: TGridRect;
  stringgrid1: TStringgrid; var j, rw: Integer);
begin
  edit5.Text := IntToStr(j);
  rw := j;
  myRect.Left := 0;
  myRect.Top := rw;
  myRect.Right := 5;
  myRect.Bottom := rw;
  stringGrid1.Selection := myRect;
  edit1.SetFocus;
end;

但我不能这样称呼它:

procedure Tform1.Button2Click(Sender: TObject);
begin
  highlight;
end;

如何解决?我必须拆分它吗?

【问题讨论】:

  • 你用的哪本书没有解释如何调用过程?我们需要知道这一点,所以我们不向其他人推荐它。你应该去找一本更好的书。

标签: function delphi procedure tstringgrid


【解决方案1】:

您提取的过程不太正确。你传递了一个你不使用的矩形。您将 rwj 作为 var 参数传递,但实际上它看起来像一个单值参数。所以我会这样:

procedure Highlight(Edit1, Edit5: TEdit; StringGrid: TStringGrid; rw: Integer);
begin
  Edit5.Text := IntToStr(rw);
  StringGrid.Selection := Rect(0, rw, 5, rw);
  Edit1.SetFocus;
end;

这样称呼它:

Highlight(Edit1, Edit5, StringGrid1, j);

现在,这假设您有时需要将不同的控件传递给过程。如果您总是传递相同的控件,则将过程设为您的类的方法:

procedure TMyForm.Highlight(rw: Integer);
begin
  Edit5.Text := IntToStr(rw);
  StringGrid.Selection := Rect(0, rw, 5, rw);
  Edit1.SetFocus;
end;

然后这样称呼它:

Highlight(j);

我在这里假设您作为j 传递的值可能会有所不同。所以它应该是一个参数。在决定某个东西应该是参数还是使用字段时,您需要使用这种推理。问问自己在调用方法时是否总是传递相同的值?

最后,不命名变量会让生活变得艰难。代码的读者如何知道Edit5 的特别之处以及为什么它与Edit1 的处理方式不同。为变量命名。

【讨论】:

  • 它的工作原理感谢您的一些更改 stringGrid.Selection := TGridRect(rect(0, rw, 5, rw));
  • 这是一个糟糕的演员阵容。我没有发现它是 TGridRect 而不是 TRect。最好使用 TGridRect 类型的局部变量。也许是一个名为 GridRect 的辅助函数。
  • @DavidHeffernan 嗯......这很奇怪 Embarcadero 自己没有添加辅助函数或构造函数或类型转换
猜你喜欢
  • 2021-11-24
  • 2011-10-30
  • 2014-10-22
  • 2013-07-17
  • 2013-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-03
相关资源
最近更新 更多