Tecman
Tecman

Reputation: 3009

Retrieve border color of WinForms ListBox/ListView rendered with OS visual styles

If we create a new WinForms .NET project and place a ListBox or ListView control on it, by default they are rendered using the OS visual styles:

enter image description here

I need to draw a 1-pixel border similar to what the system provides for ListBox/ListView in my custom control. Is there a way to retrieve the color of that system border for ListBox/ListView using a system call?

Upvotes: 0

Views: 503

Answers (1)

Tecman
Tecman

Reputation: 3009

A quick answer for C#/WinForms:

var rend = new VisualStyleRenderer("ListBox", 0, 0);
Color borderColor = rend.GetColor(ColorProperty.BorderColor);

You can also retrieve the same value with Windows API using the [GetThemeColor}(https://learn.microsoft.com/en-us/windows/win32/api/uxtheme/nf-uxtheme-getthemecolor) function with the property identifier 3801:

enter image description here

However, in the general case the border may consist of different color values and/or be blended with the parent's background, so that the retrieved color value may be not exactly what you expect.

Upvotes: 0

Related Questions