0

我有这个代码:

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

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

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;

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

4

1 回答 1

1

您提取的过程不太正确。你传递了一个你不使用的矩形。您将rwandj作为 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. 给你的变量命名。

于 2013-12-22T22:05:35.090 回答