Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

TreeView Node Bounds & OwnerDrawText

376
18 февраля 2011 года
Absolut
220 / / 22.11.2002
Пробую сделать свою прорисовку выделенных элементов TreeView. Для этого установил DrawMode = OwnerDrawText и написал функцию прорисовки:
Код:
private void treeView_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
   if ((e.State & TreeNodeStates.Selected) != 0)
   {
      Color backColor = e.Node.BackColor == Color.Empty ? treeView.BackColor : e.Node.BackColor;
      Color foreColor = e.Node.ForeColor == Color.Empty ? treeView.ForeColor : e.Node.ForeColor;

      e.Graphics.FillRectangle( new SolidBrush( backColor ), e.Node.Bounds);

      Font nodeFont = e.Node.NodeFont;
      if (nodeFont == null) nodeFont = ((TreeView)sender).Font;

      nodeFont = new Font( nodeFont, FontStyle.Underline);

      e.Graphics.DrawString(e.Node.Text, nodeFont, new SolidBrush(foreColor), e.Node.Bounds);
   }
   else  
   {
      e.DrawDefault = true;
   }
}


В данном случае просто для выделенного элемента устанавливаю подчеркивание. А проблема кроется в том, что, толи e.Node.Bounds не соответствует истине, толи прорисовка текста выполняется иначе. Что приводит к потере последнего символа текста узла при его выделении. Если последний параметр в DrawString() немного увеличить, т.е. сделать Rectangle.Inflate(e.Node.Bounds, 3, 0), то текст помещается, но начинает сдвигаться влево.

Делал ли кто-то нечто подобное, чтобы достичь адекватной прорисовки узла?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог