2008-09-24 6 views

Antwort

12

Ich denke this.SuspendLayout() & ResumeLayout() sollte es tun

3

Komplexestes von Drittanbietern Windows-Komponenten BeginUpdate und EndUpdate Methoden oder ähnlichen Formen haben, eine Batch-Updates und dann zeichnen die auszuführen Steuerung. Auf der Formularebene gibt es so etwas nicht, aber Sie könnten interessiert sein, indem Sie Double buffering aktivieren.

0

Sie können die Methoden SuspendLayout und ResumeLayout beim Aktualisieren von Eigenschaften in Formularen oder Steuerelementen verwenden. Wenn Sie Daten an Steuerelemente binden, können Sie die Methoden BeginUpdate und EndUpdate verwenden.

+0

Beginupdate und EndUpdate Methoden, auf denen? Ein Formular enthält sie nicht. –

0

SuspendLayout wird die Leistung helfen, wenn die Updates Änderungen an Kontrollen und das Layout betreffen: MSDN

4

können Sie verwenden, um die alte Win32LockWindowUpdate Funktion:

[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); 
} 
+0

Hmmmm. Interessant. –

+4

Probieren Sie stattdessen diese Syntax aus: private statisch extern lang LockWindowUpdate (IntPtr Handle); und LockWindowUpdate (IntPtr.Zero); –

+3

LockWindowUpdate ist nicht dafür ausgelegt oder beabsichtigt, das Flackern zu stoppen. Sie sollten 'SetWindowRedraw (hwnd, false)' verwenden. (http://blogs.msdn.com/b/oldnewthing/archive/2004/06/10/152612.aspx) –

12

finde ich nicht SuspendLayout() und ResumeLayout() tut, was Sie verlangen. Die LockWindowsUpdate() von Moobaa erfüllt den Zweck. Das LockWindowUpdate funktioniert jedoch nur für jeweils ein Fenster.

Sie können auch versuchen, diese:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 
using Microsoft.Win32; 
using System.Runtime.InteropServices; 

namespace WindowsTest 
{ 
    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(); 
    } 
    } 
} 
Verwandte Themen