Как использовать .NET TextBoxRenderer с TextBoxState.Hot, чтобы нарисовать горячее текстовое поле? - PullRequest
6 голосов
/ 12 декабря 2011

Я пытаюсь использовать TextBoxRenderer для визуализации «горячего» текстового поля:

TextBoxRenderer.DrawTextBox(e.Graphics, rectangle, TextBoxState.Hot);

за исключением того, что оно не работает, оно не отображает тексткоробка как горячая

  • TextBoxState.Selected не отображается как выбранный
  • TextBoxState.Hot не отображается как горячий

enter image description here

Как мне сделать TextBoxRenderer.DrawTextBox(..., Hot) визуализировать как Hot?

Связанный, но другой вопрос:

Как мне сделать TextBoxRenderer.DrawTextBox(..., Selected) визуализировать как Selected?

1 Ответ

2 голосов
/ 25 января 2017

Кажется, что TextBoxRenderer использует EP_BACKGROUNDWITHBORDER, тогда как EP_EDITBORDER_NOSCROLL обычно используется TextBox элементами управления [1] .

if (VisualStyleRenderer.IsSupported)
{
  // Use the text control's focus rectangle.
  // EP_EDITBORDER_NOSCROLL, EPSN_FOCUSED
  VisualStyleElement element = VisualStyleElement.CreateElement("EDIT", 6, 3);
  if (VisualStyleRenderer.IsElementDefined(element))
  {
    VisualStyleRenderer renderer = new VisualStyleRenderer(element);
    renderer.DrawBackground(e.Graphics, ClientRectangle);
  }
}

(заманчиво попробоватьчтобы получить элемент из VisualStyleElement, но для EP_EDITBORDER_NOSCROLL нет вложенного класса. Так что числовые константы 6 и 3 это так.)

...