gpt4 book ai didi

.net - 如何使 RightToLeftLayout 适用于 GroupBox 和面板内的控件?

转载 作者:行者123 更新时间:2023-12-01 19:14:17 29 4
gpt4 key购买 nike

根据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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com