Есть ли способ удалить синюю рамку/прямоугольник фокуса из списка элементов Combobox DropDownList? .Net WinForms С#C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Гость
 Есть ли способ удалить синюю рамку/прямоугольник фокуса из списка элементов Combobox DropDownList? .Net WinForms С#

Сообщение Гость »


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


Изображение


Код:

с использованием 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#?
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • JS API Google Maps показывает синюю рамку фокуса
    Anonymous » » в форуме CSS
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Как определить черную рамку фотографии и удалить эту рамку?
    Anonymous » » в форуме Python
    0 Ответы
    42 Просмотры
    Последнее сообщение Anonymous
  • Я хочу построить прямоугольник с указанными 4 координатами в текстовом файле в Gnuplot. Прямоугольник может быть под угл
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Как удалить синюю основную кнопку на мобильном телефоне?
    Anonymous » » в форуме CSS
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Как удалить синюю границу вокруг входного элемента в начальной загрузке 4?
    Anonymous » » в форуме Html
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»