【问题标题】:TEdit property variable delphiTEdit属性变量delphi
【发布时间】:2015-01-25 15:05:27
【问题描述】:

我在 Delphi 中有一个包含几个 TEdit 框的表单。我想要一种方法来检查所有框的验证,目前我必须为每个 TEdit 分配一个布尔变量。例如

Var
TEdit1Valid:boolean;
TEdit2Valid:boolean;

表单上的每个 TEdit 等等。

对于第一种方法,它必须看起来像这样:

If TEdit1Valid then
    ShowMessage('Your', Edit1.Name, 'is invalid');

等,等每个 TEdit 框。

这会产生很多变量,我只是想知道是否有更好的方法来做到这一点。我的一个想法是将一个名为 Valid 的属性分配给 TEdit,但我不知道该怎么做。使用这种方法,我可以为每个 TEdit 编写一个 TEdits 数组并执行以下操作

for I := 1 to High(EditList) do
begin
if EditList[I].Valid = false then
    ShowMessage('Your ', EditList[I].Name, 'is invalid');
end

这只是我刚刚编写的粗略代码的一个示例,可以与我可以像这样迭代地做的其他事情一起使用。 那么有人可以提出一个很好的方法,或者告诉我如何做上述方法。

【问题讨论】:

  • 阅读数组。请记住,约定是使用基于 0 的数组索引。
  • 另一条评论。对类型使用 T 前缀。不要在变量上使用它。

标签: validation delphi properties boolean


【解决方案1】:

如何在 TEdit 控件上使用 OnExit 事件处理程序?例如:

procedure TForm1.Edit1Exit(Sender: TObject);
begin
  with Sender as TEdit do
  begin
    if not IsValidEdit(Text) then
      ShowMessage('Your ' + Name + ' is invalid');
  end;
end;

然后将相同的 OnExit 事件应用于所有 TEdit 控件。我在上面使用的这个示例“IsValidEdit”函数可以验证 TEdit 的 Text 值,或者您可以将验证代码放在 OnExit 事件中(但在我看来,使用特定函数来验证)。

function IsValidEdit(const AValue: string): boolean;
begin
  if Length(AValue) < 5 then // not valid if length less than 5
    Result := False
  else
    Result := True;
end;

【讨论】:

  • 好的,这是一个很好的解决方案,我已经有一个 validate TEdit 功能,所以我可以使用它
【解决方案2】:

您可以使用 Tag 属性。它是整数而不是布尔值。根据 Embarcadero 的帮助 -

标签没有预定义的含义。 Tag 属性是为 开发者的方便。它可用于存储额外的 整数值,或者可以将其类型转换为任何 32 位值,例如 组件引用或指针。

【讨论】:

  • 好的,我可以使用标签 1 表示有效,0 表示无效
  • 是的,2、3等也可以有其他含义
【解决方案3】:

OnExit 适用于单个字段验证,并且在您不希望用户将字段留空或使用不正确的值时很有用。尽管它有效,但不建议用于整体表单验证。

对于表单验证,您最好创建一个在 OnClose 处理程序中调用的方法(例如 Validate),如果失败,则显示一条消息,将光标放在相关字段上,然后设置 Action : = caNone,这将阻止表单关闭。

【讨论】:

  • 谢谢 有没有办法一次调用表单上的每个 TEdit,例如语法可能如下所示: For each Form1.TEdit do Validate(TEdit[I]) This is just made up但是有没有办法做这样的事情或制作一个 tedits 数组?
  • 是的。只需遍历表单上的组件数组并在转换之前检查类型。
猜你喜欢
  • 2014-04-23
  • 1970-01-01
  • 2016-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多