gpt4 book ai didi

delphi - 发送者作为 TObject for Case ... of Delphi

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

想使用 Sender 作为 TObject 作为我的案例的选择标准...声明

procedure TForm.ShowGUI (Sender: TObject);
begin
case sender of
ToolButton1: begin
do_something;
end;

ToolButton2: begin
///
end;

ToolButton3: begin
do_stufff_here;
end;

ToolButton3: begin
///
end;

else ;

end;
end;

使发送者成为 case 语句所要求的序数类型的技巧?

最佳答案

您可以通过将 Sender 转换为整数来轻松地将其转换为序数(例如:NativeUInt(Sender) - 但这对您没有任何好处,因为 case 语句需要“分支”的常量表达式,而 ToolButton1..ToolButton3 不是常量,它们是变量。

例如,您可以对按钮的属性进行案例处理;例如,为每个 ToolButton 提供一个对其有意义的 Tag 属性。然后你可以做这样的事情:

case (Sender as TToolButton).Tag of
1: ; // ToolButton1 was pressed
2: ; // ToolButton2 was pressed
end;

正如 David 所建议的:除非您使用的控件具有与其功能直接相关的属性(不太可能),否则简单的链式 if 语句可能更易于阅读。我的第一个建议中的 Tag 属性需要专门配置,这只是引入错误的另一种方式。示例:也许您复制粘贴了一个按钮,但忘记更改它的标签,现在您有两个具有相同标签的按钮。

首先,您应该从代码中重命名您正在使用的所有组件,并为它们指定正确的名称。然后你可以写这样的东西:

if (Sender = tbAlignTextLeft) then
begin
// The tool-button for left text alignment was pressed
end
else if (Sender = tbAlignTextCenter) then
begin
// Center-alignment button was pressed
end
else
begin
// This would be the default action. If it were me, I'd raise an exception here.
end

关于delphi - 发送者作为 TObject for Case ... of Delphi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14870246/

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