/// <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;
}
/// 在折叠或展开拆分器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;
}
解决方案 »
- C#访问数据库update报错
- C# 使用ChangeWindowMessageFilter 无效?
- 请问大虾们,这怎么解决,说未将对象引用到引用到实例
- C#如何清除绘制完的文字
- 在winform中进行socket编程
- datalist应用ascx控件后台问题
- 为什么我用Visual Studio写的ASP.NET程序在本机调试可用,上传到空间就出错呢?
- 页面显示字符异常~
- 如何让treeView中某一个节点前面有CheckBox?
- C# 调用C++DLL的问题“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”
- 用XML做WEB SERVICE的小数据库,保存成XML的时机问题。
- 高手帮忙:一段VB代码转成C#代码
我不得不把程序前面的几行再复制一次:
/// <summary>
/// 在折叠或展开拆分器SplitContainer时显示动画效果
/// </summary>
/// <param name="sc">拆分器 </param>
/// <param name="sp">要折叠或展开的拆分器的Panel </param>
你建一个winform,然后拉一个spliterContainer控件. 把这段程序拷进去,马上就可以看到效果.如果自己的机子太快,可以把
//System.Threading.Thread.Sleep(10);
这四个注解去掉再试.我的程序不是给不知SplitContainer为何物的人看的.