Painting the borders of a custom control using WM_NCPAINT
Using the `WM_NCPAINT` and `WM_NCCALCSIZE` messages in order to create and paint a non-client region for a C# WinForms custom control
A article which describes how to create a custom control that supports scrolling on a single axis.
One of the nice things about the Visual Studio WinForms designers are the guidelines it draws onto design surfaces, aiding you in perfectly positioning your controls. These guidelines are known internally as snap lines, and by default each visual component inheriting from `Control` gets four of these, representing the values of the control's `Margin` property. However, this default designer doesn't include an implementation for the `BaseLine` snap line, which is used to align controls via their contained text. This article shows how to create a custom designer to allow your controls to easily include this alignment option.
Some weeks ago I was trying to make parts of WebCopy's UI a little bit simpler via the expedient of hiding some of the more advanced (and consequently less used) options. And to do this, I created a basic toggle panel control. This worked rather nicely, and while writing it I thought I'd write a short article on adding keyboard support to WinForm controls.
The `ColorGrid` control is a fairly useful control for selecting from a predefined list of colours. However, it can take up quite a bit of screen real estate depending on how many colours it contains. This article describes how you can host a `ColorGrid` in a standard `ToolStrip` control, providing access to both the `ColorGrid` and the `ColorPickerDialog`, with some custom painting to show the active colour on the button to round it off.
I was recently using a `ComboBox` control with the `DropDownStyle` set to `Simple`, effectively turning into a combined text box and list box. However, when I wanted an action to occur on double clicking an item in the list I found that the control doesn't actually offer double click support. I suppose I should have just ripped out the combo box at that point and went with dedicated controls but instead I decided to extend `ComboBox` to support double clicks.
In my last post, I described how to [drag and drop items to reorder a `ListView` control](/blog/dragging-items-in-a-listview-control-with-visual-insertion-guides). This time I'm going to describe the exact same technique, but this time for the more humble `ListBox`.
I can't remember when it was I first saw something being dragged with an insertion mark for guidance. Whenever it was, it was a long long time ago and I'm just catching up now. This article describes how to extend a `ListView` control to allow the items within it to be reordered, using insertion guides.