Мерцание пользовательского интерфейса WinForm при изменении размера формы - PullRequest
0 голосов
/ 24 сентября 2018

Когда я изменяю размер пользовательского интерфейса Winform (который имеет много дочерних элементов управления), возникает мерцание.Я использовал приведенный ниже код, который не работает для Resize.

protected override CreateParams CreateParams
{
    get
    {
        CreateParams cp = base.CreateParams;
        cp.Style &= ~0x02000000;// Turn off WS_CLIPCHILDREN
        return cp;
    }
}

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Я думаю, что вы должны изменить ExStyle, а не стиль, чтобы получить двойной буферный эффект
Также вы должны использовать |= вместо &=

protected override CreateParams CreateParams
{
    get 
    { 
         CreateParams cp = base.CreateParams;
         cp.ExStyle |= 0x02000000; // turn on WS_EX_COMPOSITED
         return cp;
    }
}

Если все еще есть детали наВаша форма, которая продолжает мерцать, может быть, этот пост может помочь

0 голосов
/ 24 сентября 2018

Создайте Панель , которая будет корнем всех дочерних элементов в вашей Форме и в вашей Форме . OnResizeBegin () вызов метода Control . SuspendLayout () Форма . OnResizeEnd () , вызов Control . ResumeLayout () .

class MainForm: Form {
    public MainForm()
    {
        this.Build();
    }

    void Build()
    {
        this.root =  new Panel { Dock = DockStyle.Fill };
        // create all controls and add them to root

        this.Controls.Add( root );
        this.ResizeBegin += (obj, args) => this.OnResizeBegin();
        this.ResizeEnd += (obj, args) => this.OnResizeEnd();
    }

    void OnResizeBegin()
    {
        this.root.SuspendLayout();
    }

    void OnResizeEnd()
    {    
        this.root.ResumeLayout( true );
    }

    Panel root;
}

Надеюсь, это поможет.

...