Как использовать.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 это так.)