Вы можете обработать WM_NCPAINT
сообщение TextBox
и нарисовать границу в не клиентской области элемента управления, если элемент управления имеет фокус.Вы можете использовать любой цвет для рисования границы:
using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;
public class ExTextBox : TextBox
{
[DllImport("user32")]
private static extern IntPtr GetWindowDC(IntPtr hwnd);
private const int WM_NCPAINT = 0x85;
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == WM_NCPAINT && this.Focused)
{
var dc = GetWindowDC(Handle);
using (Graphics g = Graphics.FromHdc(dc))
{
g.DrawRectangle(Pens.Red, 0, 0, Width - 1, Height - 1);
}
}
}
}
Результат
Рисование границ, когда элемент управления сфокусирован, полностью без мерцания:
Примечание
В текущем сообщении я просто меняю цвет рамки на фокусе.Вы также можете добавить свойство BorderColor
в элемент управления.Затем вы можете изменить цвет границы в зависимости от ваших требований во время разработки или выполнения. Здесь Я разместил более законченную версию TextBox
, которая имеет свойство BorderColor
: