我有一个TreeView,它允许用户通过选中或取消选中每个项目的复选框来选择分层数据的某些元素。目前,我在具有使用checkbox hiding technique from another question的子节点上禁用了该框,如下所示:
☑ 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由于此功能在Win32中可用,我的问题是如何在不自己绘制框的情况下做到这一点(例如,作为用户绘制的控件或using an image list)。我对Win32应用编程接口一点也不熟悉;如何扩展上面链接的技术来在托管TreeView控件上启用三态复选框?
发布于 2011-04-12 02:57:39
你看过this吗?它似乎能完成这项工作。这可能有点过时,(看起来这篇文章来自2004年),但我相信同样的原则可以扩展到你需要做的任何事情。
发布于 2011-04-12 06:23:38
如果您正在考虑绘制“混合”复选框,则此代码可能会对您有所帮助
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);
}
}这将呈现:

祝好运!
发布于 2012-05-25 18:57:09
现在,在Code Project中有了一个外观整洁的解决方案,Tri-State Tree View
我现在只是在研究,所以还没有使用它。
https://stackoverflow.com/questions/5626031
复制相似问题