You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Winforms TreeView OwnerDrawText下DrawDefault=true遮挡复选框问题

问题结论

这是TreeView.DrawDefault属性的已知实现缺陷,并非你的操作有误。

原因说明
  • 当TreeView的DrawMode设置为所有者绘制模式(OwnerDrawAll/OwnerDrawText),且在DrawNode事件中仅通过e.DrawDefault = true委托系统完成默认绘制时,.NET内置的默认绘制逻辑存在边界计算错误:给复选框预留的绘制宽度比原生无自绘模式少1像素,导致复选框最右侧的边缘像素被后续的节点文本绘制区域覆盖。
  • 你可以通过简单操作验证:临时将TreeView.CheckBoxes属性关闭再重新开启,或者手动给节点绘制边界的X坐标偏移1像素,该显示异常会直接消失,进一步证实是默认绘制逻辑的边界计算问题。
修复方案

如果需要保留所有者绘制能力,可通过两种方式规避该问题:

  1. 手动绘制复选框:在设置e.DrawDefault = true前,先调用CheckBoxRenderer.DrawCheckBox方法在正确坐标手动绘制复选框,手动给绘制宽度预留1像素的冗余,再让系统完成剩余节点内容的绘制。
  2. 调整绘制边界:在DrawNode事件中先给e.Bounds的X坐标偏移1像素,再设置e.DrawDefault = true,即可避开边界裁剪的问题。

内容的提问来源于stack exchange,提问作者amonroejj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 05:06:06