gpt4 book ai didi

delphi - 以弹出菜单项的标题属性为条件

转载 作者:行者123 更新时间:2023-12-03 15:50:24 24 4
gpt4 key购买 nike

我有一个弹出菜单,其中包含名为“Ativar”的项目,但我不明白为什么此代码不起作用:

procedure TForm6.Ativar1Click(Sender: TObject);
begin
if ativar1.Caption='Ativar' then
begin
showmessage('Initialize procedure');
ativar1.Caption:='Desativar';
end else
if ativar1.Caption='Desativar' then
begin
showmessage('Initialize procedure');
ativar1.Caption:='Ativar';
end;
end;

我想编写代码应该验证对象的标题属性以激活,如果它等于启用显示消息并将标题属性更改为禁用,但当标题属性等于禁用显示消息时并将属性再次更改为启用。怎么了?

最佳答案

您不应该在 UI 组件的标题中保留状态。如果它被翻译了怎么办?或者,如果您改变主意并在对象检查器中使标题更长?那么你的逻辑就会失败。

最好这样做:

  • 将状态从 Caption 移至单独的表单字段(与 bool 值相比,我更喜欢枚举类型,因此状态字段为 FAtivarState,类型为 TAtivarState )
  • 为确保您可以翻译您的应用程序,请将 Ativar1 的初始 AtivarCaption 从对象检查器移至 resourcestring ,一个用于 desactivar 状态(请注意,我为两者保留了 A 键盘快捷键)
    如果不需要翻译,则可以将 resourcestring 替换为 const
  • 将标题分配和业务逻辑分为两个方法(SetAtivarCaptionHandleAtivarChange)
  • FormCreate 事件方法(将其绑定(bind)到 TForm6OnCreate 事件)和 Ativar1Click 调用这些方法> 事件方法

像上面这样的结构化方法看起来需要做很多额外的工作,但事实并非如此:它可以为您节省大量时间来解决您在问题中遇到的问题。

示例代码:

// unit name, interface clause, uses list, etc ...

type
TAtivarState = (asAtivar, asDesativar);
TForm6 = class(TForm);
procedure Ativar1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
FAtivarState: TAtivarState;
procedure SetAtivarCaption(); virtual;
procedure HandleAtivarChange(); virtual;

// implementation clause, uses list, etc ...

resourcestring
AtivarCaption = '&Ativar';
DestivarCaption = 'Des&ativar';

procedure TForm6.Ativar1Click(Sender: TObject);
begin
HandleAtivarChange();
end;

procedure TForm6.FormCreate(Sender: TObject);
begin
SetActivar1Caption();
end;

procedure TForm6.SetAtivarCaption();
begin
if FAtivarState = asAtivar then
Ativar1.Caption := AtivarCaption
else
Ativar1.Caption := DesativarCaption;
end;

procedure TForm6.HandleAtivarChange();
begin
if FAtivarState = asAtivar then
begin
ShowMessage('Initialize procedure');
FAtivarState := asDesativar;
end
else
begin
ShowMessage('Initialize procedure');
FAtivarState := asAtivar;
end;
SetActivar1Caption();
end;

关于delphi - 以弹出菜单项的标题属性为条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17006152/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com