1

在 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 上,但首选已实现的常规方式。

提前致谢。

4

0 回答 0