我正在尝试通过使用双缓冲来减少TreeView控件中的闪烁。使用此处列出的建议似乎有效,它设置自Vista以来可用的TVS_EX_DOUBLEBUFFER扩展窗口样式: Treeview flickering?
但是,我更不希望对user32.dll有额外的依赖,因为项目设置也在Mono上运行。是否可以在不使用P / Invoke的情况下设置TVS_EX_DOUBLEBUFFER扩展窗口样式?
我曾希望我可以使用CreateParams来实现它,但它似乎不起作用。这是我试过的:
const int TVS_NOHSCROLL = 0x8000;
const int TVS_EX_DOUBLEBUFFER = 0x0004;
protected override CreateParams CreateParams
{
get
{
var parameters = base.CreateParams;
parameters.Style |= TVS_NOHSCROLL;
parameters.ExStyle |= TVS_EX_DOUBLEBUFFER;
return parameters;
}
}
TVS_NOHSCROLL只是为了演示使用CreateParams设置窗口样式。根据文档,您可以使用ExStyle设置扩展窗口样式,但不幸的是,这似乎不适用于TreeView。
有什么想法吗?
答案 0 :(得分:-2)
.NET中的双缓冲Windows窗体控件可以通过相同名称的属性设置:
yourControl.DoubleBuffered = true;
您可以使用控件的SetStyle
方法设置其他样式。