C# 为什么ToolStripMenuItems会出现这种情况?

C# 为什么ToolStripMenuItems会出现这种情况?,c#,.net,C#,.net,将ToolStripMenuItem添加到表单并将RightToLeft设置为true,并在文本末尾添加引号时,是否将引号放在文本的前面 ToolStripMenuItem1.Text = "Name \"Text\""; ToolStripMenuItem1.RightToLeft = System.Windows.Forms.RightToLeft.Yes; 显示为;“名称”文本 编辑:单引号也会出现这种情况。编辑: 如果您只想更改文本对齐方式,则始终存在或尝试 你正在使用的功能是为了本地

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

ToolStripMenuItem1.Text = "Name \"Text\"";
ToolStripMenuItem1.RightToLeft = System.Windows.Forms.RightToLeft.Yes;
显示为;“名称”文本


编辑:单引号也会出现这种情况。

编辑:
如果您只想更改文本对齐方式,则始终存在或尝试

你正在使用的功能是为了本地化,可以支持混合内容。。。 您使用该功能的方式更像是一种滥用。。。因为Windows需要理解“混合内容”,所以您提供了一个极端(根本没有阿拉伯语)

我发现很难确定这样的行为是否真的是一个bug,尽管这种行为出人意料且不直观……

BiDi文本的呈现逻辑相当复杂-例如,当文本中的某个地方有一个感叹号,该感叹号应向右呈现为向左,这可能会导致根据实现反转方向

如需了解更多信息,请参阅


NET似乎不完全符合Unicode BiDi算法。。。甚至还有一个库试图实现它。请参见

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


长话短说,您正在使用一个特性来获得对齐,这实际上是为了做一些更复杂的事情。不要使用它。

我做错了什么,还是你认为这是一个错误?如果它显示了correcting with righttoleft=false(默认值),但不是在你改变方向时显示,那么我会说这是一个错误。这只会在righttoleft设置为true时发生吗?righttoleft设置为Yes,但RightToLeftLayout设置为No,然后查看。是的,如果RightToLeft为false,它将正确显示。还请注意熟练的API设计。它不是bool属性,您没有将其设置为true。这是一个只有两个合法值的枚举,是和否。请指出:嘿,这不仅仅是一个简单的选项。太棒了。可能是这样,但大多数标点符号和其他符号似乎都是这样。因此,如果这是原因,如何正确地显示此表单控件,使其从右向左显示,而不会导致此问题?编辑:我修正了问题代码中的错误。是的,标点符号也描述了短语。试着重新阅读答案,选择一个你不清楚的部分,我不明白你为什么要发表评论。答案的本质是RightToLeft意味着做一些与你想用它做的完全不同的事情。文本对齐只是它的一个小副作用。鉴于我不太了解文本翻译的本地化,还有什么其他方法可以让菜单项在不设置文本属性的情况下从右向左显示?ToolStripMenuItem是硬编码的,用于实现Windows GUI规则。这就是@yahia的编辑不起作用的原因。这是可能的,您必须实现自己的渲染器。起点就在这里:感谢您的编辑,让我更接近我的目标。我实际上在寻找一种方法,让菜单项从相反的方向显示出来。