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

时间:2009-11-25 11:22:14

标签: c# winforms internationalization tooltip

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

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

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

aaaaaa
bbb

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

aaaaaa
   bbb

另外:String.PadLeft无效!

有什么想法吗?

4 个答案:

答案 0 :(得分:9)

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

设置控件:

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);
}

答案 1 :(得分:4)

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

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);
        }
    }
}

答案 2 :(得分:2)

如果是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;

检查this blog以获取有关创作RTL应用程序的更多信息。

如果是网络应用程序,您可以查看w3c authoring RTL applications guidelines。基本上它归结为与Windows窗体相同的解决方案,添加了RLE字符。

答案 3 :(得分:0)

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

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

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