【问题标题】:How does one get OnActivate event handlers such as OnEnter/OnExit to fire when an already created dynamic component is activated?当已创建的动态组件被激活时,如何让 OnActivate 事件处理程序(如 OnEnter/OnExit)触发?
【发布时间】:2014-11-03 05:02:54
【问题描述】:

我目前正在编写一个学校项目。对于一个可能是菜鸟的问题,我提前道歉。

我需要为一个虚构的 NGO 制作一个系统,并且我需要让所有用户在使用该程序时注册并登录。

我使用编辑框和掩码编辑来接收登录数据。登录屏幕有两个编辑框,一个用于用户名,一个用于密码。注册屏幕是相同的表单,调整了大小,并带有两个额外的动态编辑框:一个用于确认密码,另一个用于用户的电子邮件地址。

现在,我让静态编辑框包含一个默认值:如果用户进入编辑框,那么默认值就会消失。如果用户随后在没有输入任何值的情况下退出编辑框,则默认值会重新出现。我还没有设法让动态编辑框做同样的事情。

当已创建的动态组件被激活时,如何让 OnActivate 事件处理程序(如 OnEnter/OnExit)触发?

【问题讨论】:

  • 您只需将要设置的事件属性分配给 IDE 在 IDE 中双击事件时创建的过程,例如MyForm.OnShow := FormShow。一开始可能看起来有点混乱......
  • this answer
  • 虽然您可以在运行时分配事件,但您知道吗,您可以在设计时放置控件,如果不需要,可以在运行时隐藏控件?

标签: delphi


【解决方案1】:

如果您使用的是支持 XP+ 视觉样式的相对现代的 Delphi 版本,那么 TEdit 有一个 TextHint 属性,它完全符合您的要求,根本不需要使用任何事件。

procedure TMyForm.FormCreate(Sender: TObject);
var
  Edit: TEdit;
begin
  Edit := TEdit.Create(Self);
  Edit.Parent := ...;
  ...
  Edit.TextHint := 'default text here';
end;

否则,如果你真的想使用事件,那么你可以这样做:

procedure TMyForm.FormCreate(Sender: TObject);
var
  Edit: TEdit;
begin
  Edit := TEdit.Create(Self);
  Edit.Parent := ...;
  ...
  Edit.Text := 'default text here';
  Edit.OnEnter := EditEnter;
  Edit.OnExit := EditExit;
end;

procedure TMyForm.EditEnter(Sender: TObject);
begin
  if TEdit(Sender).Text = 'default text here' then
    TEdit(Sender).Text := '';
end;

procedure TMyForm.EditExit(Sender: TObject);
begin
  if TEdit(Sender).Text = '' then
    TEdit(Sender).Text := 'default text here';
end;

【讨论】:

    猜你喜欢
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多