SuspendLayout Bug Problem
Mein Problem:
Ich möchte zur Laufzeit ein Panel mit Textboxen füllen.
Aber man sieht wie sich jede Textbox aufbaut, obwohl vor Füllen Form+Panel.SupendLayout() aufgerufen wird und danach ResumeLayout().
Laut MSDN:
The layout logic of the control is suspended until the ResumeLayout method is called.
Komisch nur dass im InitializeComponent() genau das gleiche gemacht wird, dort aber sieht man den Aufbau der Textboxen nicht.
Lösung: (mittels pinvoke)
[DllImport("user32", CharSet = CharSet.Auto)]
private extern static IntPtr SendMessage(IntPtr hWnd, int msg, int wParam, IntPtr lParam);
// Stop redrawing:
SendMessage(panelContainer.Handle, WM_SETREDRAW, 0, IntPtr.Zero);
// Stop sending of events:
eventMask = SendMessage(panelContainer.Handle, EM_GETEVENTMASK, 0, IntPtr.Zero);
// *** Controls hinzufügen usw.... ***
// turn on events
SendMessage(panelContainer.Handle, EM_SETEVENTMASK, 0, eventMask);
// turn on redrawing
SendMessage(panelContainer.Handle, WM_SETREDRAW, 1, IntPtr.Zero);
ODER:
[DllImport("user32.dll")]
public static extern bool LockWindowUpdate(IntPtr hWndLock);
LockWindowUpdate(panelContainer.Handle);
// *** Controls hinzufügen usw.... ***
LockWindowUpdate(IntPtr.Zero);
gefunden auf:
Use LockWindowUpdate to get flicker-free RichTextBox update
No comments:
Post a Comment