在 WinForms 中,我想知道是否可以在 TreeView 中以编程方式设置编辑框的位置,如果可以,如何设置?
让我提供更多细节。我们有一个所有者绘制的 TreeView (System.Windows.Forms.TreeView),其 DrawMode 设置为 OwnerDrawAll。我们首先绘制一个图标,然后是层次结构,然后是与项目相关的图标,然后是文本。
[O] +- # Root 1
| |
[X] | +- # Node 1
| | |
[X] | | +- # SubNode 1
| | |
[O] | | +- # SubNode 2
| |
[O] | +- # Node 2
|
[X] +- # Root 2
|
[X] +- # Node 3
在上图中,[X]
和[O]
是第一个图标的#
表示,符号是项目相关图标的表示。
问题是,当使用常规 TreeView 方式编辑文本时,通过将 LabelEdit 设置为 true,编辑框与图标重叠(图表上的 # 符号)而不是在图标旁边,因为我们改变了文本渲染。另一个问题是单击以使编辑框出现的位置(矩形)也发生了变化。
我尝试将 Indent 属性设置为更高的值,然后将我的层次结构、与项目相关的图标和文本渲染移回左侧以保持其正确对齐,但在这种情况下,每个节点的缩进加倍:
它在数学上导致[spacing = level * indent * 2]
我需要的地方[spacing = indent + (level * indent)]
我只是无法为每个节点单独设置 Indent 属性,因此此解决方案无效。
我试图在 OnBeforeLabelEdit 事件中成功获取编辑框句柄,但后来我发现我无法用它做任何有用的事情。
我们正在考虑使用自定义 TextBox 并将其放置在 TreeView 上,但首选已实现的常规方式。
提前致谢。