Используйте StateImageList и TreeNode.StateImageIndex для таких целей. Вам также необходимо подписаться на событие MouseDown и изменить состояние проверки (изображение состояния), когда пользователь нажимает на изображение состояния. Используя этот подход, вы также можете эмулировать флажки с тремя состояниями, например.
На самом деле внутренняя реализация TreeView использует ту же методику, но она скрыта от вас.
Метод создания изображения для ImageList на основе CheckBoxState:
private Image CreateCheckBoxGlyph(CheckBoxState state)
{
Bitmap Result = new Bitmap(imlCheck.ImageSize.Width, imlCheck.ImageSize.Height);
using (Graphics g = Graphics.FromImage(Result))
{
Size GlyphSize = CheckBoxRenderer.GetGlyphSize(g, state);
CheckBoxRenderer.DrawCheckBox(g,
new Point((Result.Width - GlyphSize.Width) / 2, (Result.Height - GlyphSize.Height) / 2), state);
}
return Result;
}