상속: IDisposable
예제 #1
0
        internal PopupForm()
        {
            _instance = this;
            _current = null;
            _mouseOver = false;
            _animationStep = 0;
            _popupScreen = null;

            _popupTimer = new Timer();

            _popupTimer.Tick += new EventHandler(PopupTimer_Tick);

            _idleCompleteTimer = new Timer { Interval = 4000 };

            _idleCompleteTimer.Tick += new EventHandler(IdleCompleteTimer_Tick);

            Disposed += new EventHandler(PopupForm_Disposed);

            SetStyle(ControlStyles.Opaque | ControlStyles.Selectable , false);
            SetStyle(ControlStyles.OptimizedDoubleBuffer| ControlStyles.SupportsTransparentBackColor, true);
        }
예제 #2
0
        void PopupForm_Disposed(object sender, EventArgs e)
        {
            if (_current != null)
            {
                _current.Dispose();
                _current = null;
            }

            _popupTimer.Dispose();
            _idleCompleteTimer.Dispose();

            _instance = null;

            while (_queue.Count > 0)
            {
                var popup = _queue[0];

                _queue.RemoveAt(0);

                popup.Show();
            }
        }
예제 #3
0
        private void AnimateWaiting()
        {
            _popupTimer.Stop();

            if (_queue.Count > 0)
            {
                _state = PopupState.Waiting;

                if (_current != null)
                {
                    _current.Dispose();
                }

                _current = _queue[0];

                _queue.RemoveAt(0);

                if (_current == null)
                    throw new Exception("Expected current popup");

                CalculatePopupRect();
                UpdateFromAnimationStep();

                _popupTimer.Interval = _current.Duration;
                _popupTimer.Start();

                Invalidate();
            }
            else
            {
                CompleteClosing();
            }
        }
예제 #4
0
 public PopupEventArgs(Popup popup)
 {
     Popup = popup;
 }
예제 #5
0
        internal void Show(Popup popup)
        {
            _queue.Add(popup);

            if (_current == null)
            {
                _current = _queue[0];

                _queue.RemoveAt(0);

                Cursor = _current.Cursor;

                CalculatePopupRect();

                if (PopupUtil.ShouldShowPopup(this, _popupScreen))
                {
                    ShowPopup();
                }
                else
                {
                    _state = PopupState.Pending;

                    _popupTimer.Interval = 200;
                    _popupTimer.Start();
                }
            }
        }
예제 #6
0
 public void CancelPopup(Popup popup)
 {
     if (popup == _current)
     {
         ShowNext();
     }
     else
     {
         if (_queue.Remove(popup))
         {
             popup.Dispose();
         }
     }
 }
예제 #7
0
파일: Popup.cs 프로젝트: pvginkel/SystemEx
 public static void CancelPopup(Popup popup)
 {
     if (PopupForm.Instance != null)
     {
         PopupForm.Instance.CancelPopup(popup);
     }
 }