как обернуть текст во всплывающей подсказке - PullRequest
10 голосов
/ 12 июля 2010

Как обернуть текст, который должен появиться во всплывающей подсказке

Ответы [ 5 ]

7 голосов
/ 12 июля 2010

Похоже, он не поддерживается напрямую:

Как перенести всплывающую подсказку, которая отображается?

Вот метод, использующий Reflection для достичь этого.

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

Ретт Гонг

5 голосов
/ 12 июля 2010

Другой способ - создать регулярное выражение, которое автоматически переносится.

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

ссылка

1 голос
/ 21 декабря 2017

Для WPF вы можете использовать свойство TextWrapping:

<ToolTip>
    <TextBlock Width="200" TextWrapping="Wrap" Text="Some text" />
</ToolTip>
1 голос
/ 26 сентября 2013

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

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

И вы будете использовать его как:

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 голосов
/ 29 мая 2016

Вы можете установить размер всплывающей подсказки, используя свойство e.ToolTipSize, это приведет к переносу слов:

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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...