У меня есть специально созданное поле со списком, которое выглядит так, как показано на этом рисунке (с синей рамкой фокуса)

Код:
с использованием CxFlatUI; использование системы; использование System.ComponentModel; использование System.Drawing; используя System.Drawing.Drawing2D; используя System.Drawing.Text; использование System.Runtime.InteropServices; использование System.Windows.Forms; пространство имен App.Controls { класс CxFlatComboBoxEnhanced: ComboBox { [DllImport("user32.dll")] статический extern IntPtr GetWindowDC (IntPtr hWnd); [DllImport("user32.dll")] статический extern int ReleaseDC (IntPtr hWnd, IntPtr hDC); [Доступно для просмотра (правда)] [DefaultValue(typeof(Color), "Белый")] общедоступное переопределение цвета BackColor { получить => base.BackColor; набор { base.BackColor = значение; Недействителен(); } } [Доступно для просмотра (правда)] [DefaultValue(typeof(Color), "Черный")] публичное переопределение цвета ForeColor { получить => base.ForeColor; набор { base.ForeColor = значение; Недействителен(); } } [Доступно для просмотра (правда)] [DefaultValue(typeof(Color), "Черный")] общественный цвет DropArrowColor {get; набор; } [Доступно для просмотра (правда)] [DefaultValue(typeof(Color), "Белый")] общественный цвет DropColor {get; набор; } [Доступно для просмотра (правда)] [DefaultValue(typeof(Color), "Серый")] общественный цвет DropHoverColor {get; набор; } общедоступный CxFlatComboBoxEnhanced() { DrawItem += CxFlatComboBoxEnhanced_DrawItem; SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.ResizeRedraw | ControlStyles.OptimizedDoubleBuffer, true); DoubleBuffered = правда; ПлоскийСтиль = ПлоскийСтиль.Плоский; DrawMode = DrawMode.OwnerDrawFixed; Высота предмета = 30; } защищенное переопределение void WndProc (ref Message m) { base.WndProc(ref m); если (m.Msg == 0x000F || m.Msg == 0x133) { IntPtr hDC = GetWindowDC(m.HWnd); если (hDC.ToInt32() == 0) возврат; Графика графика = Graphics.FromHdc(hDC); графики.PixelOffsetMode = PixelOffsetMode.HighQuality; Graphics.SmoothingMode = SmoothingMode.HighQuality; графики.TextRenderingHint = TextRenderingHint.ClearTypeGridFit; Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; графика.Очистить(Родитель.BackColor); GraphicsPath backPath = DrawHelper.CreateRoundRect(1, 1, Ширина — 2, Высота — 2, 2); графики.FillPath(новый SolidBrush(BackColor), backPath); графики.DrawPath(новое перо(BackColor, 2), backPath); Graphics.DrawString(Text, Font, new SolidBrush(ForeColor), new Point(8, 8)); если (Выпадающее меню) { Graphics.DrawLine(new Pen(DropArrowColor, 1), Ширина - 22, Высота/2 + 2, Ширина - 17, 15); Graphics.DrawLine(new Pen(DropArrowColor, 1), Ширина - 12, Высота/2 + 2, Ширина - 17, 15); } еще { Graphics.DrawLine(new Pen(DropArrowColor, 1), Ширина - 22, Высота / 2 - 3, Ширина - 17, 20); Graphics.DrawLine(new Pen(DropArrowColor, 1), Ширина - 12, Высота / 2 - 3, Ширина - 17, 20); } графика.Dispose(); ReleaseDC(m.HWnd, HDC); } если (m.Msg == 0x0134) { IntPtr hDC = GetWindowDC(m.LParam); если (hDC.ToInt32() == 0) возврат; Графика графика = Graphics.FromHdc(hDC); графики.PixelOffsetMode = PixelOffsetMode.HighQuality; Graphics.SmoothingMode = SmoothingMode.HighQuality; графики.TextRenderingHint = TextRenderingHint.ClearTypeGridFit; Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; графика.Очистить(Родитель.BackColor); графики.FillRectangle(новый SolidBrush(DropColor), графики.ClipBounds); графика.Dispose(); ReleaseDC(m.LParam,hDC); } } Private void CxFlatComboBoxEnhanced_DrawItem (отправитель объекта, DrawItemEventArgs e) { если (e.Index < 0) возврат; е.DrawBackground(); e.Graphics.SmoothingMode = SmoothingMode.HighQuality; e.Graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; e.Graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit; e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; if ((e.State & DrawItemState.Selected) == DrawItemState.Selected) { e.Graphics.FillRectangle(new SolidBrush(DropHoverColor), e.Bounds); e.Graphics.DrawString(base.GetItemText(base.Items[e.Index]), Font, новый SolidBrush(ForeColor), новый RectangleF(e.Bounds.X + 8, e.Bounds.Y, e.Bounds.Width - 8, e.Bounds.Height - 5), StringAlign.BottomLeft); } еще { e.Graphics.FillRectangle(new SolidBrush(DropColor), e.Bounds); e.Graphics.DrawString(base.GetItemText(base.Items[e.Index]), Font, новый SolidBrush(ForeColor), новый RectangleF(e.Bounds.X + 8, e.Bounds.Y, e.Bounds.Width - 8, e.Bounds.Height - 5), StringAlign.BottomLeft); } e.Graphics.Dispose(); } } } И я хочу удалить эту синюю рамку фокуса. У меня есть рабочий код, который делает DropDownList таким

Часть кода, отвечающая за это:
if (m.Msg == 0x0134) { IntPtr hDC = GetWindowDC(m.LParam); если (hDC.ToInt32() == 0) возврат; Графика графика = Graphics.FromHdc(hDC); графики.PixelOffsetMode = PixelOffsetMode.HighQuality; Graphics.SmoothingMode = SmoothingMode.HighQuality; графики.TextRenderingHint = TextRenderingHint.ClearTypeGridFit; Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; графика.Очистить(Родитель.BackColor); графики.FillRectangle(новый SolidBrush(DropColor), графики.ClipBounds); графика.Dispose(); ReleaseDC(m.LParam,hDC); } Но он удаляет рамку только тогда, когда какой-либо элемент списка находится в фокусе, а также рисует прямоугольник поверх остальных элементов, а также, когда я открываю список, он появляется с рамкой, и когда я перемещаю мышь за пределы границы формы, он также появляется. Есть ли способ заставить его работать правильно, используя .net winforms C#?