在复杂的更新期间,我可能更喜欢一次显示所有更改.我知道有一种方法可以让我这样做,但它是什么?
我认为这个.SpendpendLayout()和ResumeLayout()应该这样做
我没有找到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(); } }
您可以使用旧的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); }