爲了其他人的利益尋找,我會提供我的hackorama(感謝Hans!)以供參考。
當我最初構建我的樹時,我現在將空白填充到將在我的... OnDrawText(對象發件人,DrawTreeNodeEventArgs e)方法中修改的節點的.Text末尾。在這種方法中,我使用TextRenderer.DrawText來自定義節點的外觀,但是與定製的東西相對應的矩形不會被任何計算我的滾動條大小所考慮。滾動條的大小仍然由原始文本決定。由於原始文本(大量地)用空白填充,所以滾動條被適當地繪製。
我不知道這將如何滯後一段時間,但它現在的作品。
編輯於11/12/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;
這是TreeView中衆所周知的缺陷,它缺少一個MeasureNode事件。解決它需要hackorama,你必須僞造節點的Text屬性來獲得足夠大的邊界。 –
感謝您的評論。雖然我並不完全遵循。我在這裏閱讀了一個類似的帖子,但並未真正弄清楚該怎麼做。 – chrismead
這是你的意思嗎,漢斯? http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/4ec2283b-7567-4fdf-b08e-be187b4afc7c/(以前的評論來自你的生活?)如果我已經在使用標籤對於其他事情,這是否意味着我運氣不好? – chrismead