如何右键对齐菜单中的快捷键?

时间:2011-02-11 23:25:26

标签: winforms winapi menu alignment shortcut

我添加了菜单项快捷键,但排列不当。

enter image description here

我需要这样做:

enter image description here

3 个答案:

答案 0 :(得分:7)

啊,我想我终于想出了如何做到这一点(很长一段时间以来我一直在困惑你如何获得两个不同的截图......)。事实证明,有两种方式可以指示Windows在下拉菜单中对齐快捷键。

第一种(也可能是最标准的)方式是在与菜单文本对应的字符串中插入制表符 \t )。这将生成原始问题中显示的底部示例,即所有标识符左对齐且稍微悬垂的示例。这是几乎所有Microsoft应用程序中的标准,并且是我知道的唯一选项,直到几分钟前才存在。

The first option, created using a tab character delimiter, with shortcut key sequences left-aligned示例资源字符串:&Print…\tCtrl+P

第二种方法是用资源字符串中的 \t 替换\a转义序列(是的,奇怪的是通常表示alert bell )。这会导致Windows right 对齐菜单中的所有快捷键序列,从而生成第一个屏幕截图中所示的示例。这确实产生了一个更有效地使用屏幕空间的菜单(它更小),但这是以每个快捷键序列在左侧边缘上的整齐对齐为代价的,我认为这使得可读性稍微容易一些。 / p>

The second option, created using an '\a' delimiter, with shortcut key sequences right-aligned示例资源字符串:&Print…\aCtrl+P

因此,如果您希望菜单看起来像原始问题中的第二个示例(是的,我会混淆地向后排列我的样本。抱歉),您需要用以下方式分隔快捷键序列:资源文件中包含菜单项文本字符串的制表符(\t)。

奇怪的是,您声称正在使用.NET WinForms,它可以自动处理所有这些(使您免于弄乱资源文件)。我知道它插入了制表符,并且我见过它生成的所有菜单看起来像你的第二个例子。

最好的办法是将菜单切换到早期版本的.NET Framework中包含的旧MainMenu控件。 (为此,您可能必须右键单击工具箱并手动添加控件 - 默认情况下,在Visual Studio的更高版本中不存在。)这将确保您看到预期的对齐行为,与记事本等所有标准Windows应用程序一致。它还生成看起来像本机操作系统菜单的菜单(在Vista和7中,它们被涂成蓝色),而不是由MenuStrip控件生成的业余外观所有者绘制的菜单,这些菜单完全不合适在现代版本的Windows中。

Microsoft的official documentation 确认MainMenu control仍然支持将来使用,因此没有理由担心在您的应用中使用它。我高度建议每个人都使用它:

  

虽然MenuStrip取代并添加了以前版本的MainMenu控件的功能,但如果您选择,MainMenu将保留以便向后兼容和将来使用。

答案 1 :(得分:5)

正如您所见,它们是“正确”对齐的。 (没有双关语)。

Right

这是菜单的默认行为。你需要自定义绘图来做不同的事情。

答案 2 :(得分:2)

每个操作系统都有它独特的外观和感觉,我想你必须有充分的理由不尊重Windows上的其他所有应用程序。我想你会放弃这个问题,或者用OwnerDrawn项扩展菜单。

Here是有关该主题的过度杀伤性文章。