WinForms で、TreeView のエディット ボックスの位置をプログラムで設定できるかどうかを知りたいです。
詳細を教えてください。DrawMode を OwnerDrawAll に設定して、所有者が TreeView (System.Windows.Forms.TreeView) を描画しています。最初にアイコンを描画し、次に階層、アイテム関連のアイコン、テキストの順に描画します。
[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 に設定すると、編集ボックスがアイコンの横ではなくアイコン (グラフの # 記号) に重なって表示されることです。これは、テキストのレンダリングをシフトしたためです。もう 1 つの問題は、編集ボックスを表示するためにクリックする場所 (長方形) もずれていることです。
Indent プロパティをより高い値に設定してから、階層、アイテム関連のアイコン、およびテキストのレンダリングを左に戻して適切に配置しようとしましたが、この場合、ノードごとにインデントが 2 倍になります。
数学的には[spacing = level * indent * 2]
必要な場所[spacing = indent + (level * indent)]
ノードごとに Indent プロパティを個別に設定できないため、このソリューションは有効ではありません。
OnBeforeLabelEdit イベントでエディット ボックス ハンドルを取得しようとしましたが、成功しましたが、それを使用して何も役に立たないことがわかりました。
カスタム TextBox を使用して TreeView に配置することを考えていますが、既に実装されている通常の方法を使用することをお勧めします。
前もって感謝します。