Kennen Sie das auch? Der Fensterinhalt flackert, während eine bestimmte Aktion bzw. eine Vielzahl von Aktionen ausgeführt wird? Wie Sie diesen unangenehmen und störenden Effekt ausschalten, zeigt Ihnen der nachfolgende Tipp. Der Code zum Ein-/Ausschalten des Neuzeichnens kapseln wir hierzu in einer kleinen Klasse: Imports System.Runtime.InteropServices Public Class cLockUpdate ' benötigte API-Struktur <StructLayout(LayoutKind.Sequential)> _ Public Structure RECT Public Left As Integer Public Top As Integer Public Right As Integer Public Bottom As Integer End Structure ' benötigte API-Funktionen <DllImport("user32.dll", CharSet:=CharSet.Auto)> _ Private Shared Function GetClientRect( _ ByVal hWnd As System.IntPtr, _ ByRef lpRECT As RECT) As Integer End Function Declare Auto Function SendMessage Lib "user32.dll" ( _ ByVal hWnd As IntPtr, _ ByVal msg As Integer, _ ByVal wParam As IntPtr, _ ByVal lParam As IntPtr) As IntPtr <DllImport("user32.dll", CharSet:=CharSet.Auto)> _ Private Shared Function RedrawWindow( _ ByVal hWnd As IntPtr, _ ByRef lprcUpdate As RECT, _ ByVal hrgnUpdate As IntPtr, _ ByVal flags As Int32) As Int32 End Function ' API-Konstanten Private Const RDW_INVALIDATE As Int32 = &H1 Private Const WM_SETREDRAW As Int32 = &HB Private Const RDW_ALLCHILDREN As Int32 = &H80 Private Const RDW_UPDATENOW As Int32 = &H100 Private Const RDW_ERASE As Int32 = &H4 ''' <summary> ''' Deaktiviert / Aktiviert das Neuzeichnen eines Fensters ''' </summary> ''' <param name="hWnd">Handle des Fensters/Controls</param> ''' <param name="wLock">True, um das Neuzeichnen zu verhiner ''' False, um das Neuzeichnen wieder zu aktivieren</param> Public Shared Sub LockWindow(ByVal hWnd As IntPtr, ByVal wLock As Boolean) Dim ClientRect As New RECT If wLock = True Then SendMessage(hWnd, WM_SETREDRAW, False, 0&) Else SendMessage(hWnd, WM_SETREDRAW, True, 0&) GetClientRect(hWnd, ClientRect) RedrawWindow(hWnd, ClientRect, 0&, RDW_ERASE Or _ RDW_INVALIDATE Or RDW_ALLCHILDREN Or RDW_UPDATENOW) End If End Sub End Class Beispiel für den Aufruf: ' Zeit-Messung starten Dim sw As New Stopwatch sw.Start() ' Neuzeichnen der RichTextBox verhindern cLockUpdate.LockWindow(Me.RichTextBox1.Handle, True) ' ... hier die Aktionen ... ' Neuzeichnen wieder aktivieren mit autom. Refersh cLockUpdate.LockWindow(Me.RichTextBox1.Handle, False) ' benötigte Zeit ausgeben sw.Stop() MsgBox("msec: " & sw.ElapsedMilliseconds.ToString) Hinweis: ' Neuzeichnen des gesamten Fensters sperren cLockUpdate.LockWindow(Me.Handle, True) ' ... ' Neuzeichnen wieder aktivieren cLockUpdate.LockWindow(Me.Handle, False) Anmerkung: ' Neuzeichnen der ListBox verhindern ListBox1.BeginUpdate() ' ... ' Neuzeichnen wieder einschalten ListBox1.EndUpdate() Dieser Tipp wurde bereits 17.559 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
vb@rchiv CD Vol.6 Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! Online-Update-Funktion Entwickler-Vollversionen u.v.m. Tipp des Monats Oktober 2024 Heinz Prelle Firewall-Status unter WinXP/Vista prüfen Das Beispiel prüft, ob die Firewall unter Windows XP/Vista eingeschaltet ist oder nicht. Zudem wird eine Abfrage durchgeführt ob es sich bei dem zugrundeliegenden Betriebssystem um Windows XP/Vista handelt oder nicht. TOP! Unser Nr. 1 Neu! sevDataGrid 3.0 Mehrspaltige Listen, mit oder ohne DB-Anbindung. Autom. Sortierung, Editieren von Spalteninhalten oder das interaktive Hinzufügen von Datenzeilen sind ebenso möglich wie das Erstellen eines Web-Reports. |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |