Мне нужно установить цвет границы элемента управления Combobox.
Я искал в Google пример кода, реализующего ControlPaint.Drawborder.
То, что я нашел, не идеально. Цвет рамки не изменяется.
В приведенном ниже коде вы увидите две ключевые функции: WndProc и PaintControlBorder(), которые используются для получения базовые события Windows и обрабатывать их.
Последнее используется для рисования границы элемента управления. После отладки с помощью Visual Studio я обнаружил, что код функции PaintControlBorder() был выполнен.
Почему цвет границы не меняется?
[ToolboxItem(true)]
public class ModifiedComboBox : ComboBox
{
new public System.Windows.Forms.DrawMode DrawMode { get; set; }
public Color HighlightColor { get; set; } //set select item highlight color
private IntPtr hDC;
private Graphics gdc;
private const int WM_ERASEBKGND = 0x14; // some windows message id
private const int WM_PAINT = 0xF;
private const int WM_NC_PAINT = 0x85;
private const int WM_PRINTCLIENT = 0x318;
private const int WM_MOUSEHOVER = 0x2A1;
private const int WM_MOUSELEAVE = 0x2A3;
[DllImport("user32")]
private static extern IntPtr GetDC(IntPtr hWnd);
private Rectangle rectale;
public ModifiedComboBox()
{
hDC = GetDC(Handle);
gdc = Graphics.FromHdc(hDC);
SetStyle(ControlStyles.Selectable, false);
base.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
this.HighlightColor = Color.Gray;
this.DrawItem += new DrawItemEventHandler(AdvancedComboBox_DrawItem); //t bind draw item handler
rectale = new Rectangle(0, 0, Width, Height);
}
public void AdvancedComboBox_DrawItem(object sender, DrawItemEventArgs e)
{
if (e.Index < 0)
return;
ComboBox combo = sender as ComboBox;
if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
{
e.Graphics.FillRectangle(new SolidBrush(HighlightColor), e.Bounds);
//e.Graphics.DrawString(combo.Items[e.Index].ToString(), e.Font, new SolidBrush(combo.BackColor), new Point(e.Bounds.X, e.Bounds.Y));
e.Graphics.DrawString(combo.Items[e.Index].ToString(), e.Font, new SolidBrush(combo.ForeColor), new Point(e.Bounds.X, e.Bounds.Y));
}
else
{
e.Graphics.FillRectangle(new SolidBrush(combo.BackColor), e.Bounds);
e.Graphics.DrawString(combo.Items[e.Index].ToString(), e.Font, new SolidBrush(combo.ForeColor), new Point(e.Bounds.X, e.Bounds.Y));
}
e.DrawFocusRectangle();
}
protected override void WndProc(ref Message m)// windows message handler
{
if (this.DropDownStyle == ComboBoxStyle.Simple)
{
base.WndProc(ref m);
return;
}
switch (m.Msg)
{
case WM_NC_PAINT:
break;
case WM_PAINT:
base.WndProc(ref m);
PaintControlBorder();
break;
default:
base.WndProc(ref m);
break;
}
}
private void PaintControlBorder()
{
ControlPaint.DrawBorder(gdc, this.ClientRectangle, Color.Orange, ButtonBorderStyle.Solid);
}
}
Подробнее здесь: https://stackoverflow.com/questions/541 ... r-color-of
Как я могу использовать метод Control Point.DrawBorder для изменения цвета границы ComboBox? ⇐ C#
Место общения программистов C#
1737218716
Anonymous
Мне нужно установить цвет границы элемента управления Combobox.
Я искал в Google пример кода, реализующего ControlPaint.Drawborder.
То, что я нашел, не идеально. Цвет рамки не изменяется.
В приведенном ниже коде вы увидите две ключевые функции: WndProc и PaintControlBorder(), которые используются для получения базовые события Windows и обрабатывать их.
Последнее используется для рисования границы элемента управления. После отладки с помощью Visual Studio я обнаружил, что код функции PaintControlBorder() был выполнен.
Почему цвет границы не меняется?
[ToolboxItem(true)]
public class ModifiedComboBox : ComboBox
{
new public System.Windows.Forms.DrawMode DrawMode { get; set; }
public Color HighlightColor { get; set; } //set select item highlight color
private IntPtr hDC;
private Graphics gdc;
private const int WM_ERASEBKGND = 0x14; // some windows message id
private const int WM_PAINT = 0xF;
private const int WM_NC_PAINT = 0x85;
private const int WM_PRINTCLIENT = 0x318;
private const int WM_MOUSEHOVER = 0x2A1;
private const int WM_MOUSELEAVE = 0x2A3;
[DllImport("user32")]
private static extern IntPtr GetDC(IntPtr hWnd);
private Rectangle rectale;
public ModifiedComboBox()
{
hDC = GetDC(Handle);
gdc = Graphics.FromHdc(hDC);
SetStyle(ControlStyles.Selectable, false);
base.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
this.HighlightColor = Color.Gray;
this.DrawItem += new DrawItemEventHandler(AdvancedComboBox_DrawItem); //t bind draw item handler
rectale = new Rectangle(0, 0, Width, Height);
}
public void AdvancedComboBox_DrawItem(object sender, DrawItemEventArgs e)
{
if (e.Index < 0)
return;
ComboBox combo = sender as ComboBox;
if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
{
e.Graphics.FillRectangle(new SolidBrush(HighlightColor), e.Bounds);
//e.Graphics.DrawString(combo.Items[e.Index].ToString(), e.Font, new SolidBrush(combo.BackColor), new Point(e.Bounds.X, e.Bounds.Y));
e.Graphics.DrawString(combo.Items[e.Index].ToString(), e.Font, new SolidBrush(combo.ForeColor), new Point(e.Bounds.X, e.Bounds.Y));
}
else
{
e.Graphics.FillRectangle(new SolidBrush(combo.BackColor), e.Bounds);
e.Graphics.DrawString(combo.Items[e.Index].ToString(), e.Font, new SolidBrush(combo.ForeColor), new Point(e.Bounds.X, e.Bounds.Y));
}
e.DrawFocusRectangle();
}
protected override void WndProc(ref Message m)// windows message handler
{
if (this.DropDownStyle == ComboBoxStyle.Simple)
{
base.WndProc(ref m);
return;
}
switch (m.Msg)
{
case WM_NC_PAINT:
break;
case WM_PAINT:
base.WndProc(ref m);
PaintControlBorder();
break;
default:
base.WndProc(ref m);
break;
}
}
private void PaintControlBorder()
{
ControlPaint.DrawBorder(gdc, this.ClientRectangle, Color.Orange, ButtonBorderStyle.Solid);
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/54103083/how-can-i-use-the-controlpaint-drawborder-method-to-modifiy-the-border-color-of[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия