探している他の人のために、参考までに私のハッコラマ (Hans に感謝します!) を提供します。
最初にツリーを構築するとき、...OnDrawText(object sender, DrawTreeNodeEventArgs e) メソッドで変更するノードの .Text の末尾に空白を埋め込みます。このメソッドでは、TextRenderer.DrawText を使用してノードの外観をカスタマイズしますが、カスタマイズされたものに対応する四角形は、スクロールバーのサイズを計算する際に考慮されません。スクロールバーのサイズは元のテキストによって決まります。元のテキストには(大量に)空白が埋め込まれているため、スクロールバーは適切に描画されます。
これが時間の経過とともにどのように保持されるかはわかりませんが、今のところ機能しています。
2012 年 11 月 12 日に編集: ツールチップを非表示にするには、一部の WndProc メッセージを無視します。WM_VSCROLL 部分は、スクロール時のちらつきを軽減するためのものです。他のケースはツールチップに関連していましたが、どれが何をしたか正確には覚えていません。必要なのは Notify だけかもしれませんが、念のためメソッド全体を追加すると思いました。
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
//case WindowsConstants.WM_HSCROLL:
case WindowsConstants.WM_VSCROLL:
{
var nfy = m.WParam.ToInt32() & 0xFFFF;
if (nfy == WindowsConstants.SB_THUMBTRACK)
{
currentMsgCount++;
if (currentMsgCount % skipMsgCount == 0)
base.WndProc(ref m);
return;
}
if (nfy == WindowsConstants.SB_ENDSCROLL)
currentMsgCount = 0;
base.WndProc(ref m);
}
break;
case WindowsConstants.MouseLeave:
case WindowsConstants.NcMouseLeave:
case WindowsConstants.MouseHover:
case WindowsConstants.NcMouseHover:
case WindowsConstants.Notify:
break;
default:
base.WndProc(ref m);
break;
}
}
public const int NcMouseHover = 0x2a0;
public const int MouseHover = 0x2a1;
public const int NcMouseLeave = 0x2a2;
public const int MouseLeave = 0x2a3;
public const int Notify = 0x4e;