我怎样才能简明扼要地检查几个编辑框的原始值是否发生了变化?
How can I concisely check whether any of several edit boxes have changed from their original values?
我创建的简单项目包含 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 of Form i consign 3 strings value to 3 TEdit.Text and set modify variable to 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的一个exit分配给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;
创建过程或函数以减少上述代码的任何想法。 :)
您可以使用数组使它更简洁,但只有三个项目可能不值得。如果这真的是所有正在考虑的代码,我会这样写:
procedure TForm1.Edit1Exit(Sender: TObject);
begin
btnSave.Enabled :=
(Edit1.Text <> strWelcome) or
(Edit2.Text <> strTo) or
(Edit3.Text <> strThailand);
end;
您应该删除三个布尔字段。它们不再被使用,并且在任何情况下都应该是本地的或作为具有 getter 功能的属性公开。你应该将 strXXX
变量转换为常量,因为我假设它们不会改变。
我还建议为您的编辑控件提供信息性名称。
我创建的简单项目包含 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 of Form i consign 3 strings value to 3 TEdit.Text and set modify variable to 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的一个exit分配给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;
创建过程或函数以减少上述代码的任何想法。 :)
您可以使用数组使它更简洁,但只有三个项目可能不值得。如果这真的是所有正在考虑的代码,我会这样写:
procedure TForm1.Edit1Exit(Sender: TObject);
begin
btnSave.Enabled :=
(Edit1.Text <> strWelcome) or
(Edit2.Text <> strTo) or
(Edit3.Text <> strThailand);
end;
您应该删除三个布尔字段。它们不再被使用,并且在任何情况下都应该是本地的或作为具有 getter 功能的属性公开。你应该将 strXXX
变量转换为常量,因为我假设它们不会改变。
我还建议为您的编辑控件提供信息性名称。