日期:2014-05-18  浏览次数:20945 次

急!求助——winform程序加载时控件闪烁严重
求各位大虾帮助
winform程序界面有70多个控件(Lable 和 TextBox),在ShowDialog() 时,这些控件显示得特别慢,好像是一条线一条线画出来的,而且还重重叠叠的,看起来特别的闪。
在网上搜索了好多方法,都不管用;
1、this.SuspendLayout(); .... this.ResumeLayout(false);
2、双缓冲 DoubleBuffered true... 
  SetStyle(ControlStyles.UserPaint, true);
  SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景. 
  SetStyle(ControlStyles.DoubleBuffer, true); // 双缓冲 
3、……

SOS……。

------解决方案--------------------
Try...
C# code


[DllImport("user32.dll")]
static extern bool LockWindowUpdate(IntPtr hWndLock);



LockWindowUpdate(panelContainer.Handle);

// Clear Panel
panelContainer.Controls.Clear();

// my temporary TextBox
TextBox myT ;

for (int lauf=0; lauf < 200; lauf++)
{
    // Create New TextBox
    myT = new TextBox();

    // Add TextBox to the Panel
    panelContainer.Controls.Add(myT);
}
// redraw the window
LockWindowUpdate(IntPtr.Zero);

------解决方案--------------------
我也遇到过类似的问题,可以这么处理,
可以给窗体设置一个背景图,然后把你所有的lable都设为不可见的,只保留输入控件可见。
因为lable只是用来显示信息,这部分操作你可以直接把lable的信息画在背景图上,这样可以节省很多开销

我之前的窗体有40多个lable和10个textbox,把lable全部处理掉之后,加载速度快很多,几乎看不出来
------解决方案--------------------
探讨
求各位大虾帮助
winform程序界面有70多个控件(Lable 和 TextBox),在ShowDialog() 时,这些控件显示得特别慢,好像是一条线一条线画出来的,而且还重重叠叠的,看起来特别的闪。
在网上搜索了好多方法,都不管用;
1、this.SuspendLayout(); .... this.ResumeLayout(false);
2、双缓冲 DoubleBuffered ……

------解决方案--------------------
探讨
引用:
如果有可能重做最好,重新构建UI。

How to do?怎么样重构UI可以解决这个问题???

------解决方案--------------------
探讨

引用:
引用:
引用:
引用:

谢谢 已发……