Сделать владельцем рисованные всплывающие подсказки с картинками в C#
В этом примере отображаются создаваемые пользователем всплывающие подсказки для каждой из его кнопок. Он рисует изображение слева от текста, назначенного подсказке каждой кнопки.
Чтобы сделать всплывающие подсказки владельца, сначала добавьте компонент Tooltip в форму и установите его свойство OwnerDraw в true.
Компонент Tooltip - это расширенный поставщик, который добавляет новое свойство ToolTip для каждого элемента управления формы. Например, компонент Tooltip в примерной программе называется tipButtons, поэтому он добавляет новое свойство под названием ToolTip на tipButtons к каждой из кнопок примера. Вы можете установить текст всплывающей подсказки элементов управления во время разработки или во время выполнения.
Обработчик событий Drawtip Tooltip рисует всплывающие подсказки элементов управления. Этот обработчик событий не может установить размер области всплывающей подсказки, но обработчик события Popup компонента может быть использован. Следующий обработчик события Popup выполняется до появления всплывающей подсказки.
private const int Margin = 10; // Установите границы всплывающей подсказки. private void tipButtons_Popup(object sender, PopupEventArgs e) { int image_wid = 2 * Margin + Properties.Resources.happy.Width; int image_hgt = 2 * Margin + Properties.Resources.happy.Height; int wid = e.ToolTipSize.Width + 2 * Margin + image_wid; int hgt = e.ToolTipSize.Height; if (hgt < image_hgt) hgt = image_hgt; e.ToolTipSize = new Size(wid, hgt); }
Этот код получает размер изображения, хранящегося в ресурсе Properties.Resources.happy, и добавляет размер в 10 пикселей.
Затем код получает размер, необходимый для текста всплывающей подсказки, из параметра e.ToolTipSize. Он добавляет ширину изображения к ширине всплывающей подсказки текста. Он также гарантирует, что разрешенная высота достаточно велика, чтобы удерживать изображение. После вычисления необходимого размера код сохраняет его в параметре e.ToolTipSize, поэтому компонент Tooltip знает, сколько места требуется программе.
Когда отображается всплывающая подсказка, следующий обработчик события Draw рисует изображение и текст всплывающей подсказки.
// Нарисуем всплывающую подсказку. private void tipButtons_Draw(object sender, DrawToolTipEventArgs e) { // Нарисуем фон и границу. e.DrawBackground(); e.DrawBorder(); // Нарисуем изображение. e.Graphics.DrawImage(Properties.Resources.happy, Margin, Margin); // Рисуем текст. using (StringFormat sf = new StringFormat()) { sf.Alignment = StringAlignment.Near; sf.LineAlignment = StringAlignment.Center; int image_wid = 2 * Margin + Properties.Resources.happy.Width; Rectangle rect = new Rectangle(image_wid, 0, e.Bounds.Width - image_wid, e.Bounds.Height); e.Graphics.DrawString( e.ToolTipText, e.Font, Brushes.Green, rect, sf); } }
Этот код использует методы DrawToolTipEventArgs DrawBackground и DrawBorder для рисования обычного фонового рисунка и рамки. Затем он использует метод e.Graphics объекта DrawImage, чтобы нарисовать изображение, перемещенное вниз, и вправо на расстояние от края.
Далее код создает объект StringFormat для выравнивания текста всплывающей подсказки. Он устанавливает свойства объекта, чтобы центрировать текст по вертикали и выравнивать по горизонтали слева. (Посмотрите на картинку выше, чтобы увидеть, как выравнивается текст.)