数据绑定在刷新时控制“闪烁”

时间:2010-02-18 00:42:14

标签: c# data-binding selectedindexchanged

这是一件小事,但我只是想知道......

Visual Studio 2008,C#。

我有一个带有数据绑定控件的主 - 细节表单。当用户在列表框中选择记录时,所有详细信息都会在表单上的多个数据绑定控件中更新。

碰巧的是,当重新填充新数据时,它们有点“闪烁”或眨眼,有点像电子波在几秒钟内穿过表格:)不知道如何更好地解释它

没什么大不了的,但是,它看起来“不稳定”和丑陋,所以,为了优雅,我只是想知道是否有一些简单的方法来阻止它?

我考虑过调用 SuspendLayout ResumeLayout (在容器控件上),但我应该处理哪些事件? listBox_SelectedValueChanged 用于暂停它,我猜......但是要恢复?

2 个答案:

答案 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;