我有一个WinForms应用程序,它使用一个表单中的四个面板来保存和显示信息,控件等。这些面板隐藏或显示取决于在表单上按下的按钮 - 我希望你明白:)面板是透明的,表格包含背景图像。
现在问题 - 如果表单的背景是图像,面板上的控件将其状态更改为显示需要太多时间渲染 - 有一种闪烁,你可以看到控件如何呈现一个接连不断。有没有人遇到过这个?
附加信息
我将不胜感激任何帮助。
答案 0 :(得分:1)
在表单上添加一个面板并将其停靠到中间,将您的背景图像用于此面板...并尝试以下代码
MainPanel.SuspendLayout();
panel1.Visible= true;
panel2.Visible= false;
MainPanel.ResumeLayout();
答案 1 :(得分:0)
如果你对win32 API没问题, 解决方案1)
[DllImport("user32.dll")]
public static extern bool LockWindowUpdate(IntPtr hWndLock);
点击按钮:
try
{
LockWindowUpdate(this.Handle);
//code here
}
finally
{
LockWindowUpdate(IntPtr.Zero);
}
解决方案2)将SendMessage()与WM_SETREDRAW(更好的一个)一起使用
private const int WM_SETREDRAW = 0x000B;
private const int WM_USER = 0x400;
private const int EM_GETEVENTMASK = (WM_USER + 59);
private const int EM_SETEVENTMASK = (WM_USER + 69);
[DllImport("user32", CharSet = CharSet.Auto)]
private extern static IntPtr SendMessage(IntPtr hWnd, int msg, int wParam, IntPtr lParam);
IntPtr eventMask = IntPtr.Zero;
点击按钮:
try
{
// Stop redrawing:
SendMessage(panel1.Handle, WM_SETREDRAW, 0, IntPtr.Zero);
// Stop sending of events:
eventMask = SendMessage(panel1.Handle, EM_GETEVENTMASK, 0, IntPtr.Zero);
// code here
}
finally
{
// turn on events
SendMessage(panel1.Handle, EM_SETEVENTMASK, 0, eventMask);
// turn on redrawing
SendMessage(panel1.Handle, WM_SETREDRAW, 1, IntPtr.Zero);
}