具有复选框的.NET TreeView控件

3

TreeView控件有复选框属性,但它会在每个节点上放置一个复选框。我该如何只在我想要的节点上放置复选框?

2个回答

3
使用StateImageListTreeNode.StateImageIndex来实现此目的。您还需要订阅MouseDown事件,并在用户单击状态图像时更改检查状态(状态图像)。通过使用此方法,您还可以模拟三态复选框,例如。
实际上,内部TreeView实现实际上使用相同的方法,但这对您是隐藏的。
基于CheckBoxState创建ImageList图像的方法:
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;
}

0

我放弃了使用TreeView,因为它有限且存在缺陷。

你应该能够通过使用开源的TreeViewAdv轻松实现这种行为。


2
你在TreeView中遇到了哪些错误? - Neil N
实际上,本地的TreeView非常强大,但是你需要进行许多检查,因为每个新的Windows发布版本中,TreeView都会发生演变并获得新功能。.Net TreeView包装器没有使用所有TreeView的潜力,对于许多高级功能,你需要进行子类化。 - arbiter
已经有一段时间了,但我记得的一个错误是在某些情况下事件没有触发。 - Eric J.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接