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

Winforms 如何右对齐菜单中的快捷键?,winforms,winapi,menu,alignment,shortcut,Winforms,Winapi,Menu,Alignment,Shortcut,我添加了我的菜单项快捷键,但它们排列不整齐 我需要这样做: 如您所见,它们是“右”对齐的。(没有双关语) 这是菜单的默认行为。您需要自定义绘图来进行不同的操作。每个操作系统都有其特定的外观,我想您必须有很好的理由不尊重windows上其他应用程序的外观。我想你要么放弃这个问题,要么用OwnerDrawn项扩展菜单 这是一篇关于这个主题的文章。啊,我想我终于找到了解决方法(你是如何得到两个不同的截图的,这让我困惑了很长一段时间)。事实证明,有两种方法可以指示Windows在下拉菜单中对齐快捷键

我添加了我的菜单项快捷键,但它们排列不整齐

我需要这样做:


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


这是菜单的默认行为。您需要自定义绘图来进行不同的操作。

每个操作系统都有其特定的外观,我想您必须有很好的理由不尊重windows上其他应用程序的外观。我想你要么放弃这个问题,要么用
OwnerDrawn
项扩展菜单


这是一篇关于这个主题的文章。

啊,我想我终于找到了解决方法(你是如何得到两个不同的截图的,这让我困惑了很长一段时间)。事实证明,有两种方法可以指示Windows在下拉菜单中对齐快捷键

第一种(可能也是最标准的)方法是在与菜单文本对应的字符串中插入一个制表符(
\t
)。这将生成原始问题中所示的底部示例,其中所有标识符都是左对齐的,一些标识符略微突出。这是几乎所有Microsoft应用程序的标准,也是我几分钟前才知道存在的唯一选项

示例资源字符串:
打印…\tCtrl+p

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

示例资源字符串:
打印…\aCtrl+p

因此,如果您希望您的菜单看起来像原始问题中的第二个示例(是的,我将示例向后排列,很抱歉),您需要在包含菜单项文本字符串的资源文件中使用制表符(
\t
)分隔快捷键序列

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

最好的办法是将菜单切换到早期版本的.NET Framework附带的旧
main菜单
控件。(要做到这一点,您可能需要右键单击工具箱并手动添加控件—在Visual Studio的更高版本中,默认情况下不存在该控件。)这将确保您看到预期的对齐行为,与所有标准Windows应用程序(如记事本)一致。它还生成类似于本机操作系统菜单(在Vista和7中,它们被涂成蓝色)的菜单,而不是由
MenuStrip
控件生成的业余用户绘制的菜单,这些菜单在现代版本的Windows中完全不合适

微软确实确认,未来仍支持使用,因此没有理由担心在应用程序中使用它。我强烈建议大家改用这个:

尽管MenuStrip取代了以前版本的MainMenu控件并将其功能添加到该控件中,但如果您愿意,MainMenu仍将保留以供向后兼容和将来使用

\使用AppendMenu(…,“&Open\aCtrl+O”);(警报铃)时不起作用,你知道如何使用“AppendMenu”(不使用资源文件)来使用这个东西吗?