使用WinForms,我有一个字符串,我想将其设置为工具提示。该字符串由Environment.NewLine
的行分隔,如下所示:
x.ToolTipText = "aaaaaa" + Environment.NewLine + "bbb";
当此字符串设置为ToolTip时,它看起来是:
aaaaaa
bbb
但我的问题是当我希望它被本地化为阿拉伯语并且ToolTip不支持默认的RightToLeft属性时,所以它看起来非常糟糕。我希望它看起来像:
aaaaaa
bbb
另外:String.PadLeft
无效!
有什么想法吗?
答案 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并将其很好地放在工具提示的位置。但是其他人用自己绘制的工具提示显示出更漂亮的方式,这绝对是可行的方法。