English 中文(简体)
Right to left tooltip text c#
原标题:

Using WinForms, I have a string which I want to set into a ToolTip. The string is separated by lines with Environment.NewLine, like so:

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

when this string is set to the ToolTip it looks:

aaaaaa
bbb

But my problem is when I want it to be localized to Arabic and ToolTip does not support the default RightToLeft property, so it looks very bad. I want it to look like:

aaaaaa
   bbb

Also: String.PadLeft does not help!

Any idea?

问题回答

Second try. Didn t manage to get the previous solution attempt to behave correctly. Found an alternate way by rendering the tooltip using a custom draw method.

Setup the controls:

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

Handle the draw event:

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

If it s windows forms I guess you have to rely on the unicode control characters to mark the tooltip text as RTL.

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

Check this blog for more information on authoring RTL applications.

If it s a web application you can check the w3c authoring RTL applications guidelines. Basically it comes down to the same solution as for windows forms, adding RLE chars.

The ToolTip control already supports this. The key is that the control for which you display the tip has a right-to-left layout. This example form demonstrates this:

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
there", this);
        }
    }
}

Just some general thoughts to give an idea about what s going on: the tooltip class does not draw text like a multiline textbox. The whole tool-tip is considered one line without a binding rectangle, hence RTL vs LTR have no meaning (other then the order of characters within the text).

Result: using normal right-to-left or left-to-right switches either with Unicode RTL codepoints or otherwise, won t help when it comes to aligning: none is applied.

One way out is (ab)using a TextBox and place it nicely over the place of the tooltip. But others have shown prettier ways with owner-drawn tooltips, which is definitely the way to go.





相关问题
Bring window to foreground after Mutex fails

I was wondering if someone can tell me what would be the best way to bring my application to the foreground if a mutex was not able to be created for a new instance. E.g.: Application X is running ...

How to start WinForm app minimized to tray?

I ve successfully created an app that minimizes to the tray using a NotifyIcon. When the form is manually closed it is successfully hidden from the desktop, taskbar, and alt-tab. The problem occurs ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

Handle DataTable.DataRow cell change event

I have a DataTable that has several DataColumns and DataRow. Now i would like to handle an event when cell of this DataRow is changed. How to do this in c#?

Apparent Memory Leak in DataGridView

How do you force a DataGridView to release its reference to a bound DataSet? We have a rather large dataset being displayed in a DataGridView and noticed that resources were not being freed after the ...

ALT Key Shortcuts Hidden

I am using VS2008 and creating forms. By default, the underscore of the character in a textbox when using an ampersand is not shown when I run the application. ex. "&Goto Here" is not ...

WPF-XAML window in Winforms Application

I have a Winforms application coded in VS C# 2008 and want to insert a WPF window into the window pane of Winforms application. Could you explain me how this is done.

热门标签