如何调用多个参数的程序?

时间:2013-12-22 21:55:55

标签: function delphi procedure tstringgrid

我有这段代码:

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;

如何解决?我必须分开吗?

1 个答案:

答案 0 :(得分: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的区别对待。为变量命名。