WinForms TreeView中的三态复选框

我有一个TreeView,允许用户通过选中或取消选中每个项目的复选框来选择分层数据的某些元素。 目前,我在有孩子的节点上禁用了使用其他问题的复选框隐藏技术的框 ,如下所示:

☑ Node 1 ☐ Node 2 • Node 3 ☑ Node 3.1 ☑ Node 3.2 • Node 4 ☐ Node 4.1 ☑ Node 4.2 

但更好的解决方案是为父节点使用三态复选框,如下所示:

 ☑ Node 1 ☐ Node 2 ☑ Node 3 ☑ Node 3.1 ☑ Node 3.2 ☒ Node 4 ☐ Node 4.1 ☑ Node 4.2 

由于此function在Win32中可用,我的问题是如何在不自己绘制框的情况下执行此操作(例如,作为用户绘制的控件或使用图像列表 )。 我根本不熟悉Win32 API; 如何扩展上面链接的技术以在托管的TreeView控件上启用三态checbox?

你看过这个吗? 它似乎做了这个工作。 它可能有点陈旧,(看起来这篇文章是从2004年开始的),但我确信同样的原则可以扩展到你需要做的任何事情。

如果您正在考虑绘制混合复选框,此代码可能会对您有所帮助

 class MixedCheckBox:Control { protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); CheckBoxRenderer.DrawCheckBox(e.Graphics, new Point(0, 0), Bounds, Text, Font, false, System.Windows.Forms.VisualStyles.CheckBoxState.MixedNormal); } } 

这将呈现: 在此处输入图像描述

祝好运!

现在,在Tri-State Tree View的 Code Project中有一个整洁的解决方案

我现在正在研究,所以尚未使用它。