В C #, во всплывающей подсказке, как изменить другой цвет для другой части текста? - PullRequest
0 голосов
/ 24 мая 2019

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

ToolTip ToolTip = new ToolTip();
ToolTip .Show(" X value:"+s+"\nLine 1 Y value: =" + ss + "\nLine 2 Y value:=" + ss1, chart, (int)e.Location.X, (int)e.Location.Y);

Я могу установить только один цвет переднего плана, используя ToolTip .ForeColor = System.Drawing.Color.Red;.

Я новичок в C #.

Как назначить другой цвет и нарисовать текст в пользовательском классе всплывающей подсказки или как использовать средство визуализации HTML для достижения моих требований?

Не удалось назначить другой цвет для другой части текста всплывающей подсказки.

Как этого добиться?

Ответы [ 2 ]

1 голос
/ 24 мая 2019

Вы можете нарисовать подсказку владельца

enter image description here

Пример:

ToolTip ToolTip = new ToolTip();
ToolTip.OwnerDraw = true;
ToolTip.Popup += (ss, ee) => { ee.ToolTipSize = new Size(200, 50);  };

ToolTip.Draw += (ss, ee) =>
{
    ee.DrawBackground();
    ee.DrawBorder();
    ee.Graphics.DrawString("Warning", Font, Brushes.Red, 10, 1);
    ee.Graphics.DrawString(ee.ToolTipText, Font, Brushes.Black, 1, 22);

};

ToolTip.Show("Demo only", somecontrol..);

Это простой пример;Есть еще много параметров для стилизации всплывающей подсказки, включая элементы рисования, изображения, кисти всех типов и т. д.

Также рекомендуется использовать TextRenderer вместо классического GDI + DrawString.

Обратите внимание, как я установил Size в событии PopUp!

Все виды форматирования возможны с текстом;для многострочного текста рекомендуется использовать перегрузку с ограничительным прямоугольником вместо координат x / y и, возможно, также выравнивание с StringFormat.Обратите внимание, что всегда сложно встроить отформатированные части в текст.

Возможно, но утомительно, чтобы быть действительно правильным, как всегда с рисунком GDI.- Основной трюк - сначала определить ограничивающий прямоугольник;это можно сделать с помощью MeasureString.

0 голосов
/ 24 мая 2019

Коротким ответом будет «изначально вы просто не можете» (за исключением того, что вы считаете, что сами наносите ярлык как исходный). Но как всегда в программировании есть творческие способы получить желаемый результат.

Ответ на вопрос , предложенный Орлом , в основном использует средство визуализации для разметки HTML для визуализации стилизованного текста внутри вашего приложения. Если вы посмотрите на более новую версию этой библиотеки здесь , они фактически предоставляют элемент управления WinForms ToolTip, который принимает HTML-разметку для рендеринга внутри своей области содержимого.

Для использования этого средства визуализации они предоставляют пакет nuget, который делает установку простой. Просто управляйте своими проектами пакетами nuget, ищите HtmlRenderer.WinForms и устанавливайте последнюю версию. (Проверьте, устанавливает ли он также последнюю версию HtmlRenderer.Core, потому что это не с моей стороны, и мне пришлось обновить пакет Core)

После этого перестройте проект, чтобы получить новые элементы управления в наборе инструментов дизайнера. Чтобы проверить пакет, я перетащил текстовое поле и подсказку HtmlTool на мою форму. Чтобы установить новую подсказку, вы используете ее, как обычную подсказку WinForms.

public partial class Form1 : Form
{
    public Form1()
    {
      InitializeComponent();

      this.htmlToolTip1.SetToolTip(this.textBox1, "<h1 style=\"color:red\">Hello</h1><i style=\"color:blue\">World</i>");
    }
}

Теперь вы можете стилизовать содержимое всплывающей подсказки с помощью HTML-разметки и изменить цвета переднего плана так, как вам нравится:

Screenshot

...