5

FormDoubleBuffered プロパティ (bool、Control から継承) があります。

これが true に設定されている場合、すべてのコントロールは、フォーム上にあるという理由で、ダブル バッファ方式で画面に描画されるフォームに配置されますか? それとも、独自の DoubleBuffered プロパティについて心配する必要がありますか?

4

1 に答える 1

7

私が覚えていることから、いいえ、ダブルバッファリングは子コントロールに引き継がれません。それぞれ個別に設定する必要があります。私はそれをググって、これを証明/反証するソースを見つけることができるかどうかを確認します...

編集:これを見つけました: 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();
        }
    }
于 2009-05-26T15:58:47.777 に答える