在我的Treeview上:Left是EnsureVisible()之前的TreeView,而Right是After
图标被忽略。我无法弄清楚在使用EnsureVisible()之后如何显示图标,我会使用EnsureVisible()的替代方法,但我找不到任何手动滚动的方法。在那儿? 也许一些带有user32.dll的NativeMethods或什么?
"左:在EnsureVisible之前的TreeView,右边:在"
之后答案 0 :(得分:2)
你必须使用一点外在的魔法:
using System.Runtime.InteropServices;
//..
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int GetScrollPos(IntPtr hWnd, int nBar);
[DllImport("user32.dll")]
static extern int SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw);
private const int SB_HORZ = 0x0;
private const int SB_VERT = 0x1;
// bring your node into the display
someNode.EnsureVisible();
// now you can scroll back all the way to the left:
SetScrollPos(treeView1.Handle, SB_HORZ, 0, true);
// ..or just a few pixels:
int spos = GetScrollPos( treeView1.Handle, SB_HORZ);
SetScrollPos(treeView1.Handle, SB_HORZ, spos - 20, true);
或者你可以使用SB_VERT
常量使用此函数进行整个滚动。您必须计算所选节点的位置(以像素为单位),这可能是痛苦 ..
如果看到闪烁,则应将滚动包裹在SuspendLayout()
和ResumeLayout()
块中。