/// <summary>
        /// 在折叠或展开拆分器SplitContainer时显示动画效果
        /// </summary>
        /// <param name="sc">拆分器</param>
        /// <param name="sp">要折叠或展开的拆分器的Panel</param>
        public static void AnimateSplitContainer(SplitContainer sc, SplitterPanel sp)
        {
            int distance = sc.SplitterDistance;
            bool collapsed = sp.Height == 0 || sp.Width == 0;
            int div = 3;
            int mind = 2;
            int scSize = sc.Orientation == Orientation.Horizontal ? sc.Height : sc.Width;
           
            if (sc.Panel2 == sp)
            {
                if (collapsed)
                {
                    sc.SplitterDistance = scSize - 30;
                    sc.Panel2Collapsed = false;                    int d = (sc.SplitterDistance - distance) / div;
                    while (d > mind)
                    {
                        //System.Threading.Thread.Sleep(10);
                        sc.SplitterDistance -= d;
                        d = d / div;
                    }
                }
                else
                {
                    int d = (scSize - distance) / div;
                    while (d > mind)
                    {
                        //System.Threading.Thread.Sleep(30);
                        sc.SplitterDistance += d;
                        d = d / div;
                    }
                }
            }
            else
            {
                div = 3;
                if (collapsed)
                {
                    sc.SplitterDistance = 30;
                    sc.Panel1Collapsed = false;                    int d = (distance - 30) / div;
                    for(int i = 1 ; i < div;i++) 
                    {
                        //System.Threading.Thread.Sleep(10);
                        sc.SplitterDistance += d;
                    }
                }
                else
                {
                    int d = distance / div;
                    for (int i = 1; i < div; i++)
                    {
                        //System.Threading.Thread.Sleep(10);
                        sc.SplitterDistance -= d;
                    }
                }
            }
            sc.SplitterDistance = distance;
        }

解决方案 »

  1.   

    怎么看啊,一点注解都没有,都不知道这段代码做什么的哇楼主要做splitter效果应该用js做啊
      

  2.   

    不要紧啊...你看msdn也是很慢的...  -.-用截图做个假的panel怎样?动作完成之后再把控件加回去
      

  3.   

    总体来看,程序结构很差,如果是操作界面太多可以考虑一下suspendlayout()和resumelayout();
      

  4.   

    说我程序结构差的,说一点注解都没有的,说不清楚程序干什么的,甚至还有说要用JS的.
    我不得不把程序前面的几行再复制一次:
            /// <summary> 
            /// 在折叠或展开拆分器SplitContainer时显示动画效果 
            /// </summary> 
            /// <param name="sc">拆分器 </param> 
            /// <param name="sp">要折叠或展开的拆分器的Panel </param> 
    你建一个winform,然后拉一个spliterContainer控件. 把这段程序拷进去,马上就可以看到效果.如果自己的机子太快,可以把
     //System.Threading.Thread.Sleep(10); 
    这四个注解去掉再试.我的程序不是给不知SplitContainer为何物的人看的.