Как использовать.NET TextBoxRenderer с TextBoxState.Hot, чтобы нарисовать горячее текстовое поле?

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

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

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

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

введите описание изображения здесь

Как я могу сделать TextBoxRenderer.DrawTextBox(..., Hot) сделать как Hot?

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

Как я могу сделать TextBoxRenderer.DrawTextBox(..., Selected) сделать как Selected?

1 ответ

Кажется, что 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 это так.)

Другие вопросы по тегам