WinForms - Влияет ли свойство Form.DoubleBuffered на элементы управления, размещенные в этой форме? - PullRequest
4 голосов
/ 26 мая 2009

Form имеет свойство DoubleBuffered (bool, унаследованное от Control).

Если для этого параметра установлено значение true, все ли элементы управления помещены в форму, отображаемую на экране с двойной буферизацией, благодаря тому, что она находится в форме? Или вам нужно беспокоиться о своих собственных свойствах DoubleBuffered?

1 Ответ

6 голосов
/ 26 мая 2009

Из того, что я помню, нет, двойная буферизация НЕ переносится на дочерние элементы управления. Вам нужно установить его для каждого в отдельности. Я поищу это в Google и посмотрю, смогу ли я найти источник, чтобы доказать или опровергнуть это ...

РЕДАКТИРОВАТЬ: Найдено: http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework.windowsforms/topic17173.aspx

Просто подумал о быстром взломе, чтобы обойти это. В основном, используйте отражение, чтобы получить свойство DoubleBuffered, а затем установите его:

public static class Extensions
{
    public static void EnableDoubleBuferring(this Control control)
    {
        var property = typeof(Control).GetProperty("DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic);
        property.SetValue(control, true, null);
    }
}

Затем в коде формы сделайте что-то вроде этого:

    public Form1()
    {
        InitializeComponent();
        this.DoubleBuffered = true;
        foreach (Control control in this.Controls)
        {
            control.EnableDoubleBuferring();
        }
    }
...