日期:2014-05-18  浏览次数:21071 次

C#Winform中使用Panel切换的特效
我用不同的按钮显示不同的Panel,想让Panel切换时有窗体切换的那种特效(比如说像个盒子、多米诺),该怎么做?我去改别人写好的代码,改不好。→_→。

------解决方案--------------------
简单点,切换时,打开timer,然后定时改变panel的width和height,并使panel的位于区域的中央,这个需要计算一下左上角坐标即可,(区域宽-panel宽) / 2,高也是一样,到了你要的尺寸,停止timer
------解决方案--------------------
我做过类似的效果,看这是不是你想要的:
在窗体中放一个Panel1,将其Visible属性设为false

首先建一个Animate类:

class Animate
{
#region 常量申明
/// <summary>
/// 自左向右显示控件.当使用AW_CENTER标志时,该标志将被忽略.
/// </summary>
public const Int32 AW_HOR_POSITIVE = 0x00000001;

/// <summary>
/// 自右向左显示控件.当使用AW_CENTER标志时,该标志将被忽略.
/// </summary>
public const Int32 AW_HOR_NEGATIVE = 0x00000002;

/// <summary>
/// 自顶向下显示控件.该标志可以在滚动动画和滑动动画中使用.当使用AW_CENTER标志时,该标志将被忽略.
/// </summary>
public const Int32 AW_VER_POSITIVE = 0x00000004;

/// <summary>
/// 自下向上显示控件.该标志可以在滚动动画和滑动动画中使用.当使用AW_CENTER标志时,该标志将被忽略.
/// </summary>
public const Int32 AW_VER_NEGATIVE = 0x00000008;

/// <summary>
/// 若使用AW_HIDE标志,则使控件向内重叠;若未使用AW_HIDE标志,则使控件向外扩展.
/// </summary>
public const Int32 AW_CENTER = 0x00000010;

/// <summary>
/// 隐藏控件.默认则显示控件.
/// </summary>
public const Int32 AW_HIDE = 0x00010000;

/// <summary>
/// 激活控件.在使用AW_HIDE标志后不要使用这个标志.
/// </summary>
public const Int32 AW_ACTIVATE = 0x00020000;

/// <summary>
/// 使用滑动类型.默认则为滚动动画类型.当使用AW_CENTER标志时,这个标志就被忽略.
/// </summary>
public const Int32 AW_SLIDE = 0x00040000;

/// <summary>
/// 使用淡入效果.只有当hWnd为顶层控件时才可以使用此标志.
/// </summary>
public const Int32 AW_BLEND = 0x00080000;
#endregion

[DllImportAttribute("user32.dll")]
public static extern bool AnimateWindow(IntPtr hWnd, int dwTime, int dwFlags);
}

再在按钮的单击事件中写代码:
private void button1_Click(object sender, EventArgs e)
{
this.panel1.BackColor = Color.Orange;
Animate.AnimateWindow(this.panel1.Handle, 1000, Animate.AW_SLIDE + Animate.AW_HOR_POSITIVE);
}

其中Animate.AW_SLIDE + Animate.AW_HOR_POSITIVE这些常量可以任意组合你想要的效果