1

我创建了一个简单的项目,其中包含 3 个 TEdit、1 个 TButton 和 3 个字符串和布尔变量。当 TEdit 中的每个值发生变化时,我如何创建过程或函数来设置 Button.Enable := True。需要通过创建过程或函数来减少编码,而不是下面的代码。

type
TForm1 = class(TForm)
  Edit1: TEdit;
  Edit2: TEdit;
  Edit3: TEdit;
  btnSave: TButton;
  procedure FormCreate(Sender: TObject);
  procedure Edit1Exit(Sender: TObject);
private
  { Private declarations }
public
  strWelcome, strTo, strThailand: String;
  modify1, modify2, modify3 : Boolean;
  { Public declarations }
end;

表单的 Oncreate 将 3 个字符串值委托给 3 TEdit.Text 并将修改变量设置为 False

procedure TForm1.FormCreate(Sender: TObject);
 begin
   strWelcome := 'Welcome';
   strTo      := 'To';
   strThailand:= 'Thailand';

   modify1 := false;
   modify2 := false;
   modify3 := false;

   Edit1.text := strWelcome;
   Edit2.text := strTo;
   Edit3.text := strThailand;
end;

3 个 TEdit 的 Onexit 分配给 Edit1Exit(Sender: TObject); 检查文本值是否仍然等于初始值?如果某些 TEdit.Text 发生了变化,btnSave 将被启用。

procedure TForm1.Edit1Exit(Sender: TObject);
begin
  if Edit1.Text = strWelcome then
    modify1 := False
  else
    modify1 := True;
  if Edit2.Text = strTo then
    modify2 := False
  else
    modify2 := True;
  if Edit3.Text = strThailand then
    modify3 := False
  else
    modify3 := True;
  btnSave.Enabled := modify1 or modify2 or modify3;
end;

创建过程或函数以减少上述代码的任何想法。:)

4

1 回答 1

2

您可以使用数组来使其更简洁,但只有三个项目可能不值得。如果这真的是考虑中的所有代码,我会这样写:

procedure TForm1.Edit1Exit(Sender: TObject);
begin    
  btnSave.Enabled :=
    (Edit1.Text <> strWelcome) or
    (Edit2.Text <> strTo) or
    (Edit3.Text <> strThailand);
end;

您应该删除三个布尔字段。它们不再被使用,并且在任何情况下都应该是局部变量或作为具有 getter 函数的属性公开。而且您应该将strXXX变量转换为常量,因为我假设它们不会改变。

我还建议为您的编辑控件提供信息丰富的名称。

于 2015-08-24T17:14:00.523 回答