从右到左工具提示文本c#

使用WinForms,我有一个字符串,我想将其设置为工具提示。 字符串由Environment.NewLine用行分隔,如下所示:

 x.ToolTipText = "aaaaaa" + Environment.NewLine + "bbb"; 

当此字符串设置为ToolTip时,它看起来:

 aaaaaa bbb 

但我的问题是当我希望它本地化为阿拉伯语并且ToolTip不支持默认的RightToLeft属性时,所以它看起来非常糟糕。 我希望它看起来像:

 aaaaaa bbb 

另外: String.PadLeft没有帮助!

任何的想法?

第二次尝试。 没有设法让以前的解决方案尝试正确行事。 通过使用自定义绘制方法渲染工具提示找到了另一种方法。

设置控件:

 string tip = "aaaaaa" + Environment.NewLine + "bbb"; toolTip1.OwnerDraw = true; toolTip1.Draw += toolTip1_Draw; toolTip1.SetToolTip(textBox1, tip); 

处理绘制事件:

 private void toolTip1_Draw(object sender, DrawToolTipEventArgs e) { e.Graphics.FillRectangle(SystemBrushes.Info, e.Bounds); e.DrawBorder(); e.DrawText(TextFormatFlags.RightToLeft | TextFormatFlags.Right); } 

ToolTip控件已经支持此function。 关键是您显示提示的控件具有从右到左的布局。 此示例表单演示了这一点:

 using System; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { ToolTip mTip = new ToolTip(); public Form1() { InitializeComponent(); this.RightToLeft = RightToLeft.Yes; this.RightToLeftLayout = true; } protected override void OnMouseDown(MouseEventArgs e) { mTip.Show("Hi\nthere", this); } } } 

如果它是Windows窗体,我猜你必须依赖unicode控制字符将工具提示文本标记为RTL。

 string myToolTipText = "aaaaaa"+Environment.newLine+"bbb"; char rle_char = (char)0x202B;// RLE embedding control.RightToLeft = RightToLeft.Yes; control.ToolTipText = rle_char + myToolTipText; 

有关创作RTL应用程序的更多信息,请查看此博客 。

如果是Web应用程序,您可以查看w3c创作RTL应用程序指南 。 基本上它归结为与Windows窗体相同的解决方案,添加RLE字符。

只是一些一般的想法,以了解正在发生的事情:工具提示类不会像多线文本框那样绘制文本。 整个工具提示被认为是一行而没有绑定矩形,因此RTL与LTR没有任何意义(除了文本中的字符顺序之外)。

结果:使用Unicode RTL代码点或其他方式使用正常的从右到左或从左到右的开关在对齐时无效:无应用。

一种方法是(ab)使用TextBox并将其很好地放在工具提示的位置。 但是其他人用自己绘制的工具提示显示出更漂亮的方式,这绝对是可行的方法。