سلام
این هم یه افکت دیگه .
Copyright با نقل قول 
public static void MyEffect1(Form FormName, int MiliSecondDuration = 300)
{
bool[] Visibles = new bool[FormName.Controls.Count];
int HeightDiff = FormName.Height - FormName.ClientSize.Height;
int WidthDiff = FormName.Width - FormName.ClientSize.Width;
Image StartBg = FormName.BackgroundImage;
Bitmap MyBitmap = new Bitmap(FormName.ClientSize.Width, FormName.ClientSize.Height);
Bitmap MyBitmap2 = new Bitmap(FormName.Width, FormName.Height);
FormName.DrawToBitmap(MyBitmap2, new Rectangle(0, 0, FormName.Width, FormName.Height));
Graphics MyGraphics = Graphics.FromImage(MyBitmap);
FormName.BackgroundImage = MyBitmap;
int i = 0;
foreach (Control C in FormName.Controls)
{
Visibles[i] = C.Visible;
i++;
C.Visible = false;
}
FormName.Refresh();
MyGraphics.DrawImage(MyBitmap2, -WidthDiff, -HeightDiff);
int StartWidth = FormName.Width;
int StartHeight = FormName.Height;
float HtWd = (float)FormName.Height / FormName.Width;
int StartLeft = FormName.Left;
int StartTop = FormName.Top;
DateTime StartTime = DateTime.Now;
FormName.Height = 2;
double Nesbat = 0;
FormName.Top = (int)(StartTop + (StartHeight - (Nesbat * StartHeight)) / 2);
while (Nesbat < 1)
{
Nesbat = (DateTime.Now.Subtract(StartTime).TotalMillisecond s) / MiliSecondDuration;
FormName.Left = (int)(StartLeft + (StartWidth - Nesbat * StartWidth) / 2);
FormName.Width = (int)(Nesbat * StartWidth);
FormName.Opacity = Nesbat;
FormName.Refresh();
Application.DoEvents();
}
StartTime = DateTime.Now;
Nesbat = 0;
while (Nesbat < 1)
{
Nesbat = (DateTime.Now.Subtract(StartTime).TotalMillisecond s) / MiliSecondDuration;
FormName.Top = (int)(StartTop + (StartHeight - (Nesbat * StartHeight)) / 2);
FormName.Height = (int)(Nesbat * StartHeight);
FormName.Refresh();
Application.DoEvents();
}
i = 0;
foreach (Control C in FormName.Controls)
{
C.Visible = Visibles[i];
i++;
}
FormName.Top = StartTop;
FormName.Height = StartHeight;
FormName.Left = StartLeft;
FormName.Width = StartWidth;
FormName.BackgroundImage = StartBg;
FormName.Refresh();
}
public static void MyEffect2(Form FormName, int MiliSecondDuration = 300)
{
int HeightDiff = FormName.Height - FormName.ClientSize.Height;
int WidthDiff = FormName.Width - FormName.ClientSize.Width;
Image StartBg = FormName.BackgroundImage;
Bitmap MyBitmap = new Bitmap(FormName.ClientSize.Width, FormName.ClientSize.Height);
Bitmap MyBitmap2 = new Bitmap(FormName.Width, FormName.Height);
FormName.DrawToBitmap(MyBitmap2, new Rectangle(0, 0, FormName.Width, FormName.Height));
Graphics MyGraphics = Graphics.FromImage(MyBitmap);
FormName.BackgroundImage = MyBitmap;
foreach (Control C in FormName.Controls)
{
C.Visible = false;
}
FormName.Refresh();
MyGraphics.DrawImage(MyBitmap2, -WidthDiff, -HeightDiff);
int StartWidth = FormName.Width;
int StartHeight = FormName.Height;
float HtWd = (float)FormName.Height / FormName.Width;
int StartLeft = FormName.Left;
int StartTop = FormName.Top;
DateTime StartTime = DateTime.Now;
double Nesbat = 1;
while (Nesbat > 0)
{
Nesbat = 1 - (DateTime.Now.Subtract(StartTime).TotalMillisecond s) / MiliSecondDuration;
FormName.Width = (int)(Nesbat * StartWidth);
FormName.Height = (int)(Nesbat * StartHeight);
FormName.Left = (int)(StartLeft + (StartWidth - Nesbat * StartWidth) / 2);
FormName.Top = (int)(StartTop + (StartHeight - (Nesbat * StartHeight)) / 2);
FormName.Opacity = Nesbat;
FormName.Refresh();
Application.DoEvents();
}
foreach (Control C in FormName.Controls)
{
C.Visible = true;
}
FormName.Top = StartTop;
FormName.Height = StartHeight;
FormName.Left = StartLeft;
FormName.Width = StartWidth;
FormName.BackgroundImage = StartBg;
}
این هم نمونه برای بستن و بازکردن فرم با افکت :