2010-07-12 12 views

Respuesta

7

Parece que no se admite directamente:

¿Cómo wordWrap la información sobre herramientas que ¿se visualiza?

Aquí es un método que utiliza la reflexión para lograrlo.

[ DllImport("user32.dll") ] 
private extern static int SendMessage(IntPtr hwnd, uint msg, 
    int wParam, int lParam); 

object o = typeof(ToolTip).InvokeMember("Handle", 
    BindingFlags.NonPublic | BindingFlags.Instance | 
    BindingFlags.GetProperty, 
    null, myToolTip, null); 
IntPtr hwnd = (IntPtr) o; 
SendMessage(hwnd, 0x0418, 0, 300); 

Rhett Gong

+0

Hola, ¿dónde poner este código? –

+3

El número mágico 0x418 debería idealmente definirse como una constante con el mismo nombre que el utilizado en el archivo de encabezado correspondiente Commctrl.h: "constint privado TTM_SETMAXTIPWIDTH = 0x418" - esto hace que sea más fácil buscar más información en google. – Joe

+0

En Windows 7, experimento que este truco solo resuelve el problema cuando los estilos visuales están deshabilitados en el sistema operativo. ¿Alguna idea de cómo resolver esa situación? – Mustafa

5

Otra forma, es crear una expresión regular que se ajusta automáticamente.

WrappedMessage := RegExReplace(LongMessage,"(.{50}\s)","$1`n") 

link

+3

Esto se parece a un código PHP o algo así. Aquí está la versión C#: Regex rgx = new Regex ("(. {50} \\ s)"); cadena WrappedMessage = rgx.Replace (longMessage, "$ 1 \ n"); – Patratacus

1

Este es un artículo que escribí hace poco, yo se que no es el mejor pero funciona. Es necesario extender el control sobre herramientas de la siguiente manera:

using System; 
using System.Collections.Generic; 
using System.Windows.Forms; 

public class CToolTip : ToolTip 
{ 
    protected Int32 LengthWrap { get; private set; } 
    protected Control Parent { get; private set; } 
    public CToolTip(Control parent, int length) 
     : base() 
    { 
    this.Parent = parent; 
    this.LengthWrap = length; 
    } 

    public String finalText = ""; 
    public void Text(string text) 
    { 
     var tText = text.Split(' '); 
     string rText = ""; 

     for (int i = 0; i < tText.Length; i++) 
     { 
     if (rText.Length < LengthWrap) 
     { 
      rText += tText[i] + " "; 
     } 
     else 
     { 
      finalText += rText + "\n"; 
      rText = tText[i] + " "; 
     } 

     if (tText.Length == i+1) 
     { 
      finalText += rText; 
     } 
     } 
    } 
     base.SetToolTip(Parent, finalText); 
    } 
} 

Y lo va a usar como:

CToolTip info = new CToolTip(Control,LengthWrap); 
     info.Text("It looks like it isn't supported directly. There is a workaround at 
     http://windowsclient.net/blogs/faqs/archive/2006/05/26/how-do-i-word-wrap-the- 
     tooltip-that- is-displayed.aspx:"); 
0

Es posible ajustar el tamaño de la información de herramientas usando e.ToolTipSize propiedad, esto obligará ajuste de texto:

public class CustomToolTip : ToolTip 
{ 
    public CustomToolTip() : base() 
    { 
     this.Popup += new PopupEventHandler(this.OnPopup); 
    } 

    private void OnPopup(object sender, PopupEventArgs e) 
    { 
     // Set custom size of the tooltip 
     e.ToolTipSize = new Size(200, 100); 
    } 
} 
1

para WPF, puede utilizar la propiedad TextWrapping:

<ToolTip> 
    <TextBlock Width="200" TextWrapping="Wrap" Text="Some text" /> 
</ToolTip> 
Cuestiones relacionadas