WinForms - влияет ли свойство Form.DoubleBuffered на элементы управления, размещенные в этой форме?

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

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


person xyz    schedule 26.05.2009    source источник
comment
Смотрите мою правку, чтобы узнать о возможном взломе, чтобы обойти это.   -  person BFree    schedule 26.05.2009


Ответы (1)


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

РЕДАКТИРОВАТЬ: нашел это: 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();
        }
    }
person BFree    schedule 26.05.2009
comment
Спасибо. Это похоже на PITA. - person xyz; 26.05.2009
comment
Спасибо еще раз. В общем, выглядит удобным способом быстро возиться с непубличными вещами. - person xyz; 27.05.2009
comment
По-прежнему полезен в 2018 году: P - person dognose; 02.05.2018