为什么ToolStripMenuItems会发生这种情况?

时间:2011-08-20 22:35:10

标签: c# .net

将ToolStripMenuItem添加到表单并将RightToLeft设置为true并在文本末尾加上引号时,是否将引号放在Text的前面?

ToolStripMenuItem1.Text = "Name \"Text\"";
ToolStripMenuItem1.RightToLeft = System.Windows.Forms.RightToLeft.Yes;

显示为; “姓名”文字

编辑:单引号也会发生这种情况。

2 个答案:

答案 0 :(得分:4)

通过将RightToLeft设置为Yes,您要求Windows文本呈现引擎应用在使用从右到左的顺序的语言中使用的文本布局规则。阿拉伯语和希伯来语。这些规则非常微妙,特别是因为这些语言中的英语短语并不少见。它不会像通常用阿拉伯语或希伯来语字形那样呈现“txeT emaN”,这对任何人都没有意义。它需要识别句子或短语并反转它们。行情很特别,他们描绘了一个短语。

长话短说,你正在使用一个功能来实现真正意味着做更多涉及的事情。不要用它。

答案 1 :(得分:0)

修改
如果您只想更改文字对齐方式,则始终需要ToolStripItem.AlignmentToolStripItem.Padding才能尝试...

您使用的功能是用于本地化,可以支持混合内容... 你使用这个功能的方式看起来更像是滥用...因为Windows需要理解你提供极端的“混合内容”(根本不是阿拉伯语)。

我发现总是很难确定这种行为虽然意外而且不直观但实际上是一个错误......

BiDi文本的渲染逻辑相当复杂 - 例如,当你在文本的某个地方有一个感叹号应该被渲染RightToLeft时,它会导致根据实现方向反转方向......

要获得一些见解,请参阅http://www.unicode.org/reports/tr9/

因为看起来.NET并不完全符合Unicode BiDi算法......甚至还有试图实现它的库,请参阅http://sourceforge.net/projects/nbidi/