C# winform panel中的子窗体切换时,子窗体的背景图片闪烁

hugang012070 2012-08-09 03:33:23
C# winform panel中的子窗体切换时(子窗体都有各自的背景图片),子窗体的背景图片闪烁,网上的方法看得不是很懂,求大神帮忙解决。
...全文
336 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
失落的神庙 2012-08-10
  • 打赏
  • 举报
回复
form1 和form2 没禁止重绘。这样也是不行的。
你得把form1和form2也都禁止重绘
加载完后再显示
hugang012070 2012-08-09
  • 打赏
  • 举报
回复
好像不起什么作用啊。我按你说的把切换子窗体的代码修改如下:
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
if (listView1.SelectedItems.Count == 0)
return;
SendMessage(panel1.Handle, WM_SETREDRAW, 0, IntPtr.Zero);
string context = listView1.SelectedItems[0].Text;
switch (context)
{
case "激光控制":
{

panel1.Controls.Clear();//怎样清空panel
panel1.Controls.Add(form1);
form1.Show();
}

break;

case "颜色选择":
{
panel1.Controls.Clear();//怎样清空panel
panel1.Controls.Add(form2);
form2.Show();
}
break;

default:

break;
}
SendMessage(panel1.Handle, WM_SETREDRAW, 1, IntPtr.Zero);
panel1.Refresh();//
}
hugang012070 2012-08-09
  • 打赏
  • 举报
回复
我试试
失落的神庙 2012-08-09
  • 打赏
  • 举报
回复

[DllImport("user32")]
private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, IntPtr lParam);
private const int WM_SETREDRAW = 0xB;

SendMessage(panel3.Handle, WM_SETREDRAW, 0, IntPtr.Zero);//关闭重绘


SendMessage(panel3.Handle, WM_SETREDRAW, 1, IntPtr.Zero);//开启重绘
panel3.Refresh();//强制刷新指定控件

可以用这个试试
关闭重绘就不会闪了
等全部后台代码加载完
开启重绘再强制刷新下就不闪了

110,565

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧