2008-09-24 15 views

cevap

12

Ben this.SuspendLayout() & ResumeLayout() yeter bence

3
, Windows bileşenleri BeginUpdate ve EndUpdate yöntemleri veya benzer olan çizim ardından bir güncellemeleri toplu ve gerçekleştirmek için Forms

En karmaşık üçüncü taraf kontrol. Form düzeyinde, böyle bir şey yoktur, ancak Double buffering'u etkinleştirerek ilgilenebilirsiniz.

0

Özellikleri güncellerken formda veya denetimlerde SuspendLayout ve ResumeLayout yöntemlerini kullanabilirsiniz. Verileri denetimlere bağlarsanız, BeginUpdate ve EndUpdate yöntemlerini kullanabilirsiniz. güncellemeler kontrolleri ve düzeni değişiklikleri içeren eğer

+0

BeginUpdate ve EndUpdate yöntemleri üzerinde? Bir form bunlara sahip değildir. –

4

Eski Win32LockWindowUpdate işlevini kullanabilirsiniz:

[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. İlginç. –

+4

Bu sözdizimini deneyin: özel statik extern uzun LockWindowUpdate (IntPtr Tutamağı); ve LockWindowUpdate (IntPtr.Zero); –

+3

LockWindowUpdate, titremeyi durdurmak için tasarlanmamış veya amaçlanmamıştır. SetWindowRedraw (hwnd, false) 'yi kullanmalısınız. (Http://blogs.msdn.com/b/oldnewthing/archive/2004/06/10/152612.aspx) –

12

Ben SuspendLayout() ve ResumeLayout bulmuyorum() istediğini yapar. Moobaa tarafından ölçülen LockWindowsUpdate() işlemi hile yapar. Ancak, LockWindowUpdate yalnızca bir seferde bir pencere için çalışır.

Ayrıca bu deneyebilirsiniz:

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(); 
    } 
    } 
} 
İlgili konular