c# winform程序 窗口切换 乱闪 怎么解决
我的窗口控件比较多网上查的方法都没有效果啊。
方法一: 没什么效果
如果说是防止加载了大图片闪烁的话,楼主不妨使用双缓冲的方式。PAINT事件里写上:
  SetStyle(ControlStyles.UserPaint, true);
  SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景.
  SetStyle(ControlStyles.DoubleBuffer, true); // 双缓冲方法二:阻止重绘和恢复重绘。 
具体点[DllImport("User32.dll", CharSet=CharSet.Auto, SetLastError=true)] 
        internalstaticexternint SendMessage(IntPtr hwnd, int msg, int wParam, int lParam);//开始对控件操作禁止重绘:SendMessage(禁止重绘的控件.Handle, 11, 0, 0);
//对控件的操作过程恢复重绘:SendMessage(恢复重绘的控件.Handle, 11, -1, 0); 这个方法不知道怎么用啊??
这是我的程序 窗口切换 方法: #region 窗体切换 函数
        /// <summary>
        /// 窗体切换 函数
        /// </summary>
        /// <param name="f"></param>
        public void TurnFormVisible(Form f)
        {
            frmPEDestal.Visible = false;//台座信息
            frmNUMRules.Visible = false; //节段编号规则
            frmDESignLine.Visible = false;//线形设计-总体情况
            frmCENterline.Visible = false;//设计线形 平曲线 竖曲线
            frmSEGmentDefinition.Visible = false;//节段定义
            frmSEGmentInformation.Visible = false;//节段信息
            frmCHAinStructure.Visible = false;//链式结构
            frmJOIntCross.Visible = false;//联跨
            f.Visible = true;            f.TopLevel = false; // 不是最顶层窗体
            pnlEmbed.Controls.Add(f);  // 添加到 Panel中
            f.Show();     // 显示
            f.Dock = DockStyle.Fill;
        }
        #endregion

解决方案 »

  1.   

    判断一下窗体是否被激活,如果A要激活,遍历重绘A窗体的控件,禁止B的所有控件重绘,反之一样.
      

  2.   

    双缓冲
    http://msdn.microsoft.com/zh-cn/library/3t7htc9c%28v=vs.80%29.aspx
      

  3.   

    我也遇到这种情况,那是因为窗体中的控件比较多所导致的,尤其是Panl多,这样刷新的时候不同步导致会闪烁,楼主可以调整小界面元素的数量,最好可以简化一些控件,如果有需要可以使用GDI+自己画!!!
      

  4.   

    有效的办法就是像8楼朋友说的1.减小form上控件的数量
    2.不要将控件的背景设为透明这是 winform 的劣根性,改不了的,所以现在都换  wpf 了,手机开发用 silverlight
      

  5.   

    f.Show();
    f.Dock = DockStyle.Fill;以上两句话的位置换一下试试呢?一般来说,Show 是放到最后的。
      

  6.   


    Invoke
    多线程不怎么会用 
    能教下我吗?
      

  7.   

    是不是在 Load中用了太多方法了
      

  8.   

    怎么冻结,然后加载恢复?
    [email protected] 如果有案例 发一份