'메뉴'에 해당되는 글 1건

  1. 2009.09.19 C# 윈폼 슬라이드메뉴 만들기 by 아르다

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

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

        public Form1()
        {
            InitializeComponent();
            TimerLord();
        }
        //메뉴패널이 나타날때 사용할 타이머
        private Timer MenuSlideTimerUP = new Timer();
        //메뉴패널이 사라질때 사용할 타이머
        private Timer MenuSlideTimerDOWN = new Timer();

        //타이머들을 셋팅
        private void TimerLord()
        {
            MenuSlideTimerUP.Interval = 50;
            MenuSlideTimerUP.Tick += new EventHandler(MenuSlideTimerUP_Tick);
            MenuSlideTimerDOWN.Interval = 50;
            MenuSlideTimerDOWN.Tick += new EventHandler(MenuSlideTimerDOWN_Tick);

        }
        //슬라이드의 작동상태 
        private bool UPBOOL = false;
        private void panel1_MouseMove(object sender, MouseEventArgs e)
        {
            if (UPBOOL == false)
            {
                UPBOOL = true;
                MenuSlideTimerUP.Start();

            }
        }

        private void panel1_MouseLeave(object sender, EventArgs e)
        {
            if (UPBOOL == true)
            {
                UPBOOL = false;
                MenuSlideTimerDOWN.Start();
            }
        }
        
        private void MenuSlideTimerUP_Tick(object sender, EventArgs e)
        {
            if (MenuSlideTimerDOWN.Enabled == true)
            {
                MenuSlideTimerDOWN.Dispose();
            }
            if (panel1.Left >= 0)
            {
                panel1.Left = 0;
                MenuSlideTimerUP.Stop();
            }
            else panel1.Left += 10;
        }
        private void MenuSlideTimerDOWN_Tick(object sender, EventArgs e)
        {
            if (MenuSlideTimerUP.Enabled == true)
            {
                MenuSlideTimerUP.Dispose();
            }
            if (panel1.Left <= -160)
            {
                panel1.Left = -160;
                MenuSlideTimerDOWN.Stop();
            }
            else panel1.Left -= 10;
        }
마우스를 가져가면 열리고 다시 빼면 닫히는....
좀더 다듬어서 쓰면 쓸만할듯 하네요 ㅎㅎㅎ...
Posted by 아르다