在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属性,然后将我的层次结构,与项目相关的图标和文本渲染移回到左侧以使其保持正确对齐,但在这种情况下,每个节点的缩进加倍: / p>
它在数学上导致[spacing = level * indent * 2]
我需要[spacing = indent + (level * indent)]
我无法为每个节点单独设置Indent属性,因此该解决方案无效。
我试图在OnBeforeLabelEdit事件中成功获取编辑框句柄,但后来我发现我无法对它做任何有用的事情。
我们正在考虑使用自定义TextBox并将其自己定位在TreeView上,但优先使用常规已实现的方式。
提前致谢。