是否可以在不使用p / invoke的情况下设置TVS_EX_DOUBLEBUFFER?

时间:2013-12-21 23:48:25

标签: c# winforms treeview

我正在尝试通过使用双缓冲来减少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。

有什么想法吗?

1 个答案:

答案 0 :(得分:-2)

.NET中的双缓冲Windows窗体控件可以通过相同名称的属性设置:

yourControl.DoubleBuffered = true;

您可以使用控件的SetStyle方法设置其他样式。