这是一件小事,但我只是想知道......
Visual Studio 2008,C#。
我有一个带有数据绑定控件的主 - 细节表单。当用户在列表框中选择记录时,所有详细信息都会在表单上的多个数据绑定控件中更新。
碰巧的是,当重新填充新数据时,它们有点“闪烁”或眨眼,有点像电子波在几秒钟内穿过表格:)不知道如何更好地解释它
没什么大不了的,但是,它看起来“不稳定”和丑陋,所以,为了优雅,我只是想知道是否有一些简单的方法来阻止它?
我考虑过调用 SuspendLayout 和 ResumeLayout (在容器控件上),但我应该处理哪些事件? listBox_SelectedValueChanged 用于暂停它,我猜......但是要恢复?
答案 0 :(得分:2)
您可以在刷新控件的数据时暂停绘画来防止闪烁。
来自this stackoverflow question:
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, Int32 wMsg, bool wParam, Int32 lParam);
private const int WM_SETREDRAW = 11;
public static void SuspendDrawing(Control parent)
{
SendMessage(parent.Handle, WM_SETREDRAW, false, 0);
}
public static void ResumeDrawing(Control parent)
{
SendMessage(parent.Handle, WM_SETREDRAW, true, 0);
parent.Refresh();
}
至于要处理的事件,我不确定。
答案 1 :(得分:0)
我没有注意到“SuspendLayout”为我做了什么,但值得一试。我想你会想要锁定“CurrentChanged”事件,因为当所选项目被批发更改时。
您是否已将DoubleBuffered(在道具窗口中的“行为”下)设置为true?
control.DoubleBuffered = true;