gpt4 book ai didi

c# - 控制 LTR 和 RTL 语言之间的对齐切换

转载 作者:太空宇宙 更新时间:2023-11-03 12:53:53 24 4
gpt4 key购买 nike

虽然这个问题很笼统,可以应用于网络,但我对 WinForms 特别感兴趣。

应用程序 UI 在 LTR 和 RTL 语言之间顺利切换。唯一的障碍是放置与文本框等输入控件关联的标签。

从左到右:
Left to Right

从右到左:
Right to Left

RTL 图像上的标签位置也应相应更改。

是否有通用的、程序化的方法来实现这一目标?

最佳答案

选项 1 - 镜像形式(也镜像标题栏)​​

如果 RightToLeftLayoutRightToLeft 属性都为真,则将为窗体打开镜像,并且控件放置和文本流将从右到左。因此,将 RightToLeftLayout 设置为 true 并将 RightToLeft 设置为 yes 以获得从右到左的完整布局。

这样,表单标题栏也将被镜像,控制框将显示在左侧。

选项 2 - 镜像面板(不镜像标题栏)​​

如果您不喜欢从右到左的标题栏和左侧的控件框,您应该自己创建从右到左的容器并将控件放入其中,然后设置 RightToLeftLayout container 为 true 并将容器的 RightToLeft 设置为 yes 以在不更改标题栏和控制框布局的情况下在容器中拥有完整的从右到左布局:

using System;
using System.ComponentModel;
using System.Windows.Forms;
public class ExPanel : Panel
{
const int WS_EX_LAYOUTRTL = 0x400000;
const int WS_EX_NOINHERITLAYOUT = 0x100000;
private bool rightToLeftLayout = false;

[Localizable(true)]
public bool RightToLeftLayout
{
get { return rightToLeftLayout; }
set
{
if (rightToLeftLayout != value)
{
rightToLeftLayout = value;
this.RecreateHandle();
}
}
}
protected override CreateParams CreateParams
{
get
{
CreateParams CP;
CP = base.CreateParams;
if (this.RightToLeftLayout &&
this.RightToLeft == System.Windows.Forms.RightToLeft.Yes)
CP.ExStyle = CP.ExStyle | WS_EX_LAYOUTRTL | WS_EX_NOINHERITLAYOUT;
return CP;
}
}
}

截图

这是选项 1 的屏幕截图。查看标题栏左侧的关闭按钮:

enter image description here

这是选项 2 的屏幕截图。查看标题栏右侧的关闭按钮:

enter image description here

关于c# - 控制 LTR 和 RTL 语言之间的对齐切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34626266/

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