Эффект скольжения в Windows Form приложениях в C #

      Я уже писал пост как создавать анимацию в Windows Form и сейчас представлю вам как можно использовать этот метод на практике!


На понадобятся две формы:
1)Form1 - главная
2)Form2 - дочерняя

В главной форме прописываем вызов второй, так же делаем проверку открыта она уже или нет:

private void button1_Click(object sender, EventArgs e)
{
    bool IsOpen = false;
    for (int i = 0; i <= Application.OpenForms.Count-1; i++)
    {
      // Ищем нужную форму
      if (Application.OpenForms[i].Name == "Form2")
      {
            //Если форма уже открыта то передаем ей фокус                
            IsOpen = true;
            Application.OpenForms[i].Focus();
            break;                
      }
    }
    if (IsOpen == false)
    {
        //Если форма не открыта 
        //То вызываем ее
        Form2 form = new Form2();
        form.Name = "Form2";
        form.Show();
    }
}
Во второй форме "Form2" прописываем анимацию загрузки, просто вставив вот этот код:
[Flags]
enum AnimateWindowFlags
{
    AW_HOR_POSITIVE = 0x00000001,
    AW_HOR_NEGATIVE = 0x00000002,
    AW_VER_POSITIVE = 0x00000004,
    AW_VER_NEGATIVE = 0x00000008,
    AW_CENTER = 0x00000010,
    AW_HIDE = 0x00010000,
    AW_ACTIVATE = 0x00020000,
    AW_SLIDE = 0x00040000,
    AW_BLEND = 0x00080000
}
[DllImport("user32.dll")]
static extern bool AnimateWindow(IntPtr hWnd, int time, AnimateWindowFlags flags);

protected override void OnLoad(EventArgs e)
{
    int WidthOfMain = Application.OpenForms["Form1"].Width;
    int HeightofMain = Application.OpenForms["Form1"].Height;
    int LocationMainX = Application.OpenForms["Form1"].Location.X;
    int locationMainy = Application.OpenForms["Form1"].Location.Y;
    
    this.Location = new Point(LocationMainX + WidthOfMain + 5, locationMainy + 20);
    AnimateWindow(this.Handle, 500, AnimateWindowFlags.AW_SLIDE | AnimateWindowFlags.AW_HOR_POSITIVE);
}
//Закрываем форму
private void button2_Click(object sender, EventArgs e)
{
    this.Close();
}
//Анимация плавного угасания при закрытии 
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
    AnimateWindow(this.Handle, 1000, AnimateWindowFlags.AW_BLEND | AnimateWindowFlags.AW_HIDE);
}
Вот так получилось у меня:

Комментариев нет:

Отправить комментарий

Большая просьба, не писать в комментариях всякую ерунду не по теме!