Как отключить обновление формы в Windows Forms? - PullRequest
9 голосов
/ 24 сентября 2008

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

Ответы [ 6 ]

14 голосов
/ 24 сентября 2008

Я не вижу, SuspendLayout() и ResumeLayout() делают то, что вы просите LockWindowsUpdate() упомянутый moobaa делает свое дело. Однако LockWindowUpdate работает только для одного окна за раз.

Вы также можете попробовать это:

using System;
using System.Windows.Forms;
using Microsoft.Win32;
using System.Runtime.InteropServices;

public partial class Form1 : Form
{
    [DllImport("user32.dll")]
    public static extern int SendMessage(IntPtr hWnd, Int32 wMsg, bool wParam, Int32 lParam);
    private const int WM_SETREDRAW = 11; 

    public Form1()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      SendMessage(this.Handle, WM_SETREDRAW, false, 0);

      // Do your thingies here
      SendMessage(this.Handle, WM_SETREDRAW, true, 0);

      this.Refresh();
    }
}
14 голосов
/ 24 сентября 2008

Я думаю, что так .SuspendLayout () и ResumeLayout () должны это сделать

6 голосов
/ 24 сентября 2008

Вы можете использовать старую Win32 LockWindowUpdate функцию:

[DllImport("user32.dll")]
private static extern long LockWindowUpdate(long Handle);

try {
    // Lock Window...
    LockWindowUpdate(frm.Handle);
    // Perform your painting / updates...
} 
finally {
    // Release the lock...
    LockWindowUpdate(0);
}
4 голосов
/ 24 сентября 2008

Большинство сложных сторонних компонентов Windows Forms имеют методы BeginUpdate и EndUpdate или аналогичные для выполнения пакета обновлений и , а затем для рисования элемента управления. На уровне формы такой вещи нет, но вам может быть интересно включить Двойная буферизация .

1 голос
/ 24 сентября 2008

Вы можете использовать методы SuspendLayout и ResumeLayout в форме или элементах управления при обновлении свойств. Если вы привязываете данные к элементам управления, вы можете использовать методы BeginUpdate и EndUpdate.

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

SuspendLayout поможет производительности, если обновления включают изменения в элементах управления и макете: MSDN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...