根据MSDN
form.RightToLeftLayout = True;
form.RightToLeft = ifWeWantRTL() ? RightToLeft.True : RightToLeft.False;
足以镜像 RTL 语言的表单内容。
但是控件的放置仅针对直接位于表单上的控件进行镜像,
GroupBox 或 Panel 内的内容不会被镜像,除非我首先将它们放在 TableLayoutPanel 或 FlowLayoutPanel 上。
在每个 GroupBox 中放置 TableLayoutPanel 需要大量的手动工作, 特别是重新排列控件(每个表格单元格一个控件、填充、边距等)
是否有更简单的方法使镜像适用于所有控件?
或者至少,我怎样才能绕过重新排列步骤,因为对于我们的表单数量来说,这是一项艰巨的任务?
<小时/>编辑:默认情况下继承窗体上每个控件的RightToLeft属性,
因此面板和分组框始终具有所需的 RightToLeft 设置。
尽管如此,我尝试以编程方式和设计师的方式为他们重新分配它,但没有帮助。
最佳答案
它确实看到你遇到了一个非常棘手的问题。玩了一段时间并得出以下结论:
利用一点递归,您可以运行所有控件并对陷入 Pannels 和 GroupBoxes 中的控件进行手动 RTL 转换。
这是我拼凑在一起的一个快速代码小模拟。我建议您将其放入 BaseForm 中(希望您拥有其中之一)并调用基本表单加载。
private void SetRTL (bool setRTL)
{
ApplyRTL(setRTL, this);
}
private void ApplyRTL(bool yes, Control startControl)
{
if ((startControl is Panel ) || (startControl is GroupBox))
{
foreach (Control control in startControl.Controls)
{
control.Location = CalculateRTL(control.Location, startControl.Size, control.Size);
}
}
foreach (Control control in startControl.Controls)
ApplyRTL(yes, control);
}
private Point CalculateRTL (Point currentPoint, Size parentSize, Size currentSize)
{
return new Point(parentSize.Width - currentSize.Width - currentPoint.X, currentPoint.Y);
}
关于.net - 如何使 RightToLeftLayout 适用于 GroupBox 和面板内的控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/147657/