2009-11-25 3 views
3

Использование WinForms, у меня есть строка, которую я хочу установить в подсказку. Строка разделенные линиями с Environment.NewLine, например, так:Справа налево текст всплывающей подсказки C#

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

, когда эта строка устанавливается в подсказке он выглядит:

aaaaaa 
bbb 

Но моя проблема в том, когда я хочу, чтобы быть локализованы на арабский и ToolTip не поддерживает свойство RightToLeft по умолчанию, поэтому он выглядит очень плохо. Я хочу, чтобы это выглядело как:

aaaaaa 
    bbb 

также: String.PadLeft не помогает!

Любая идея?

+0

Является ли это всплывающей подсказкой asp.net (т. Е. Элементом управления html) или это подсказка winforms? – Abel

+0

Если он не может быть скорректирован, вы можете попытаться использовать уродливый способ с добавлением пробелов – RvdK

+0

это приложение winform – song

ответ

2

Если это оконные формы, я думаю, вы должны полагаться на символы управления юникодом, чтобы пометить текст всплывающей подсказки как 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.

+1

это не поможет! – song

+0

У меня, к сожалению, не было времени проверить это, поэтому я доверял блогу. Нашел еще одно решение, которое мне удалось добиться. Я отправил в новый ответ. – PHeiberg

7

Вторая попытка. Не удалось заставить предыдущую попытку решения правильно вести себя. Найден альтернативный способ, создавая подсказку, используя собственный метод рисования.

Настройка элементов управления:

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

+1 для приятного решения! – Abel

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

Просто любопытно, но как это работает со смешанным текстом RTL/LTR? – Abel

+0

Не работает для ивритских персонажей ... :-( – itsho

0

Просто некоторые общие мысли, чтобы дать представление о том, что происходит: класс подсказки не рисовать текст, как многострочное текстовое поле. Вся подсказка считается одной строкой без прямоугольника привязки, поэтому RTL vs LTR не имеет значения (иначе, чем порядок символов в тексте).

Результат: с помощью обычных переключателей справа налево или слева направо либо с кодовыми точками Unicode RTL, либо иным образом не поможет при выравнивании: none применяется.

Один выход из (ab) с помощью TextBox и его расположение по месту всплывающей подсказки. Но другие показали более привлекательные способы с помощью нарисованных на руках всплывающих подсказок, что, безусловно, способ пойти.

Смежные вопросы