웹사이트를 보면 한번씩 메뉴창이 슬라이드로 나오는 것을 본적이 있을겁니다.
심심해서 그런 기능 구현 해보았는데...
생각보다 괜찮을거 같네요...

먼저 윈폼에 패널을 하나 추가하고 로케이션 값을 -160, 50 정도 줍니다.(Y값은 중요하지 않아요)

01public Form1()
02{
03    InitializeComponent();
04    TimerLord();
05}
06//메뉴패널이 나타날때 사용할 타이머
07private Timer MenuSlideTimerUP = new Timer();
08//메뉴패널이 사라질때 사용할 타이머
09private Timer MenuSlideTimerDOWN = new Timer();
10 
11//타이머들을 셋팅
12private void TimerLord()
13{
14    MenuSlideTimerUP.Interval = 50;
15    MenuSlideTimerUP.Tick += new EventHandler(MenuSlideTimerUP_Tick);
16    MenuSlideTimerDOWN.Interval = 50;
17    MenuSlideTimerDOWN.Tick += new EventHandler(MenuSlideTimerDOWN_Tick);
18 
19}
20//슬라이드의 작동상태
21private bool UPBOOL = false;
22private void panel1_MouseMove(object sender, MouseEventArgs e)
23{
24    if (UPBOOL == false)
25    {
26        UPBOOL = true;
27        MenuSlideTimerUP.Start();
28 
29    }
30}
31 
32private void panel1_MouseLeave(object sender, EventArgs e)
33{
34    if (UPBOOL == true)
35    {
36        UPBOOL = false;
37        MenuSlideTimerDOWN.Start();
38    }
39}
40 
41private void MenuSlideTimerUP_Tick(object sender, EventArgs e)
42{
43    if (MenuSlideTimerDOWN.Enabled == true)
44    {
45        MenuSlideTimerDOWN.Dispose();
46    }
47    if (panel1.Left >= 0)
48    {
49        panel1.Left = 0;
50        MenuSlideTimerUP.Stop();
51    }
52    else panel1.Left += 10;
53}
54private void MenuSlideTimerDOWN_Tick(object sender, EventArgs e)
55{
56    if (MenuSlideTimerUP.Enabled == true)
57    {
58        MenuSlideTimerUP.Dispose();
59    }
60    if (panel1.Left <= -160)
61    {
62        panel1.Left = -160;
63        MenuSlideTimerDOWN.Stop();
64    }
65    else panel1.Left -= 10;
66}
마우스를 가져가면 열리고 다시 빼면 닫히는....
좀더 다듬어서 쓰면 쓸만할듯 하네요 ㅎㅎㅎ...
Posted by 아르다