delphi 将TObject强制转换为TMenuItem并检索标题将&添加到字符串

bvn4nwqk  于 2022-11-04  发布在  其他
关注(0)|答案(2)|浏览(147)

所以我在下面有一些非常简单的代码。我在多个onclick事件中使用这个函数来传递TMenuItems的标题。

procedure TForm1.BtnClick(Sender: TObject);
begin
 TestFrm.MyVar:= TMenuItem(Sender).Caption;
 InteractiveSchedulerFrm.ShowModal;
end;

然而,这样做的结果是TestFrm.MyVar字段最终包含了一个原本不存在的“与”符号,而且它总是出现在一个看似随机的位置。
我已经通过替换字符串中的所有&符号暂时修补了这个问题,但我最好奇的是是什么原因导致&符号被放置在字符串中。
示例:
TMenuItem(发送者)。标题= 'TEST';
测试来源我的变量= 'TE&ST'或'&TEST'等

uelo1irk

uelo1irk1#

&符号是自动添加的,因为您可能已经将菜单的AutoHotKeys属性设置为true(我认为这甚至是默认值)。
你有两个选择:
1.将自动热键设置为false -或-
1.调用StripHotkey(从单元菜单中)以在处理标题之前删除它
我可能会选择2,因为你永远不知道是否有人(未来的你)可能不会将自动热键设置回真。

ct2axkht

ct2axkht2#

TMenuItem标题中的“与”符号用于表示菜单项的键盘快捷方式。“与”符号出现在快捷方式字符之前,并在某些情况下为字符加下划线,以确保用户了解该快捷方式。这种类型的字符称为accelerator character
例如,标题为&TEST的TMenuItem可以用Alt+T键触发,而标题为TE&ST的TMenuItem可以用Alt+S键触发。
如果您想在菜单项标题中显示一个“与”符号,则需要使用另一个“与”符号对其进行转义(例如Bacon && Eggs)。Here is a link to the first source I found about this feature.

相关问题