【发布时间】:2011-06-25 21:28:21
【问题描述】:
我添加了我的菜单项快捷键,但它们排列不当。
我需要这样:
【问题讨论】:
标签: winforms winapi menu alignment shortcut
我添加了我的菜单项快捷键,但它们排列不当。
我需要这样:
【问题讨论】:
标签: winforms winapi menu alignment shortcut
如您所见,它们是“右”对齐的。 (没有双关语)。
这是菜单的默认行为。您需要自定义绘图才能以不同的方式进行操作。
【讨论】:
每个操作系统都有其特定的外观和感觉,我想您必须有充分的理由不尊重 Windows 上其他所有应用程序的外观。我猜你要么放弃这个问题,要么用OwnerDrawn 项目扩展菜单。
Here 是关于这个主题的矫枉过正的文章。
【讨论】:
啊,我想我终于弄明白了如何做到这一点(你是如何得到这两个不同的屏幕截图的,这让我困惑了很长一段时间......)。事实证明,您可以通过 两种 方式指示 Windows 在下拉菜单中对齐快捷键。
第一种(可能也是最标准的)方法是在菜单文本对应的字符串中插入一个制表符 (\t)。这会产生原始问题中显示的底部示例,其中所有标识符都左对齐并且有些悬垂。这是几乎所有 Microsoft 应用程序中的标准,也是我在几分钟前才知道存在的唯一选项。
示例资源字符串:&Print…\tCtrl+P
第二种方法是用资源字符串中的 \a 替换 \t 转义序列(是的,奇怪的是,这通常表示 alert bell)。这会导致 Windows 将菜单中的所有快捷键序列右对齐,从而生成第一个屏幕截图中所示的示例。这确实会产生一个更有效地使用屏幕空间的菜单(它更小),但这是以每个快捷键序列在其左侧边距下的整齐对齐为代价的,我认为这会使可读性稍微容易一些。
示例资源字符串:&Print…\aCtrl+P
因此,如果您希望您的菜单看起来像原始问题中的 second 示例(是的,我混淆了我的示例向后排列。抱歉),您需要用包含菜单项文本字符串的资源文件中的制表符 (\t)。
奇怪的是,您声称使用的是 .NET WinForms,它会自动处理所有这些(让您免于弄乱资源文件的痛苦)。我知道它会插入制表符,并且我见过它生成的所有菜单 do 看起来都像您的第二个示例。
最好的办法是将您的菜单切换到早期版本的 .NET Framework 中包含的旧 MainMenu 控件。 (为此,您可能必须右键单击工具箱并手动添加控件 - 默认情况下,在更高版本的 Visual Studio 中它不存在。)这将确保您看到预期的对齐行为,与记事本等所有标准 Windows 应用程序一致。它还生成看起来像本机操作系统菜单的菜单(在 Vista 和 7 中,它们被涂成蓝色),而不是由 MenuStrip 控件生成的业余外观的所有者绘制的菜单,这些菜单在现代操作系统中完全不合适Windows 版本。
Microsoft 的official documentation确实确认MainMenu control 仍受支持以供将来使用,因此无需担心在您的应用中使用它。我强烈建议大家改用这个:
尽管 MenuStrip 替换了以前版本的 MainMenu 控件并为其添加了功能,但 MainMenu 仍保留为向后兼容和将来使用(如果您选择)。
【讨论】: