【发布时间】:2012-07-16 12:14:27
【问题描述】:
ControlHelper.SuspendDrawing(panel);
panel.Controls.Clear();
AddItemIdLabel();
AddLastEditedLabel();
AddDeleteButton();
AddSaveButton();
ControlHelper.ResumeDrawing(panel);
public static class ControlHelper
{
[DllImport("user32.dll")]
private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
private const int WM_SETREDRAW = 0xB;
public static void SuspendDrawing(Control target)
{
SendMessage(target.Handle, WM_SETREDRAW, 0, 0);
}
public static void ResumeDrawing(Control target)
{
SendMessage(target.Handle, WM_SETREDRAW, 1, 0);
target.Refresh();
}
}
如果我使用上面的代码进行测试,面板的某些部分不会被刷新。 您可以在没有添加新控件的地方看到 Clear() 之前的旧控件。
如果我将panel.Controls.Clear(); 放在ControlHelper.SuspendDrawing(panel); 之前,一切都会按预期工作但是有些闪烁是可见的,这是我试图避免的。
那么这里发生了什么?取决于我是否在暂停之前或之后清除控件集合会产生什么影响?
【问题讨论】: