퇴근5분전

 전에 만들었던 폼에서 좀 다르게 작업되었지만. 간소화 시켰음.
작업 트레이 바로 위에서 오르락~ 내리락~!! 하는 폼 작업해봤음.

사용자 삽입 이미지
      << 동작 화면... >>


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace OnTrayForm
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.StartPosition = FormStartPosition.Manual;
            this.Left = Screen.PrimaryScreen.WorkingArea.Right - this.Width;
            this.Top = Screen.PrimaryScreen.WorkingArea.Bottom;

        }

        protected override void OnShown(EventArgs e)
        {
            this.Left = Screen.PrimaryScreen.WorkingArea.Right - this.Width;
            this.Top = Screen.PrimaryScreen.WorkingArea.Bottom;

            Timer tm = new Timer();
            tm.Interval = 30;
            tm.Tick += delegate(object se, EventArgs ea)
            {
                if (this.Top > ( Screen.PrimaryScreen.WorkingArea.Bottom - this.Height + 5))
                    this.Top -= (this.Height / 15);
                else
                {
                    this.TopMost = true;
                    this.Top = Screen.PrimaryScreen.WorkingArea.Bottom - this.Height;
                    tm.Stop();
                    tm.Dispose();
                    tm = null;
                }
            };
            tm.Start();            
        }


        bool closing = false;
        protected override void OnFormClosing(FormClosingEventArgs e)
        {
            if( closing == false )
                e.Cancel = true;

            this.Left = Screen.PrimaryScreen.WorkingArea.Right - this.Width;
            this.Top = Screen.PrimaryScreen.WorkingArea.Bottom - this.Height;

            Timer tm = new Timer();
            tm.Interval = 30;
            tm.Tick += delegate(object se, EventArgs ea)
            {
                if (this.Top <= (Screen.PrimaryScreen.WorkingArea.Bottom + 5))
                    this.Top += (this.Height / 15);
                else
                {                 
                    this.Top = Screen.PrimaryScreen.WorkingArea.Bottom;
                    tm.Stop();
                    tm.Dispose();
                    tm = null;
                    closing = true;
                    this.Hide();
                    this.Close();
                }
            };  
            this.TopMost = false;
            tm.Start();       
        }
    }
}