WinForms TreeView中的三态复选框

Phi*_*son 14 c# treeview winforms

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

? Node 1
? Node 2
• Node 3
  ? Node 3.1
  ? Node 3.2
• Node 4
  ? Node 4.1
  ? Node 4.2
Run Code Online (Sandbox Code Playgroud)

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

? Node 1
? Node 2
? Node 3
  ? Node 3.1
  ? Node 3.2
? Node 4
  ? Node 4.1
  ? Node 4.2
Run Code Online (Sandbox Code Playgroud)

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

Hom*_*mam 13

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

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

祝好运!

  • 正如OP所问的那样,如何将它与“TreeView”控件一起使用? (2认同)

小智 9

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

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


mer*_*oft 2

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