コード例 #1
0
        private Point getLocation(ChildFormInfo info)
        {
            Point pos = Point.Empty;

            switch (info.Location)
            {
            case MagneticLocation.Left:
                pos = new Point(m_mainForm.Left - info.Child.Width, m_mainForm.Top);
                break;

            case MagneticLocation.Right:
                pos = new Point(m_mainForm.Right, m_mainForm.Top);
                break;

            case MagneticLocation.Top:
                pos = new Point(m_mainForm.Left, m_mainForm.Top - info.Child.Height);
                break;

            case MagneticLocation.Bottom:
                pos = new Point(m_mainForm.Left, m_mainForm.Bottom);
                break;

            default:
                break;
            }

            return(pos);
        }
コード例 #2
0
        private void ChildForm_FormClosed(object sender, EventArgs e)
        {
            ChildFormInfo info = getInfo(sender as Form);

            if (info != null)
            {
                m_childs.Remove(info);
            }
        }
コード例 #3
0
        private void ChildForm_SizeChanged(object sender, EventArgs e)
        {
            ChildFormInfo info = getInfo(sender as Form);

            if (info != null && info.State == MagneticState.Adsorbent)
            {
                resetChildLocation(info);
            }
        }
コード例 #4
0
        private void resetChildLocation(ChildFormInfo info)
        {
            if (info.Child == null)
            {
                return;
            }

            Point pos = getLocation(info);

            setChildLocation(info, pos);
        }
コード例 #5
0
        private void setChildLocation(ChildFormInfo info, Point location)
        {
            if (info.Child == null)
            {
                return;
            }

            info.CutstomSetLocation = true;
            info.Child.Location     = location;
            info.CutstomSetLocation = false;
        }
コード例 #6
0
        public void addChild(Form childForm, MagneticLocation loc)
        {
            foreach (ChildFormInfo info in m_childs)
            {
                if (info.Child == childForm)
                {
                    return;
                }
            }

            ChildFormInfo childInfo = new ChildFormInfo();

            childInfo.Child              = childForm;
            childInfo.Location           = loc;
            childInfo.State              = MagneticState.Adsorbent;
            childInfo.CutstomSetLocation = false;
            childForm.LocationChanged   += ChildForm_LocationChanged;
            childForm.SizeChanged       += ChildForm_SizeChanged;
            childForm.FormClosed        += ChildForm_FormClosed;

            m_childs.Add(childInfo);
            adsorbentChild(childInfo);
        }
コード例 #7
0
        private void ChildForm_LocationChanged(object sender, EventArgs e)
        {
            ChildFormInfo info = getInfo(sender as Form);

            if (info == null)
            {
                return;
            }

            if (info.CutstomSetLocation == true)
            {
                return;
            }

            Point location = getLocation(info);

            if (info.Child.Left > location.X && info.Location == MagneticLocation.Right)
            {
                if (info.Child.Left - location.X > Step)
                {
                    separationChild(info);
                }
                else
                {
                    adsorbentChild(info);
                }
            }
            else if (info.Child.Left < location.X && info.Location == MagneticLocation.Left)
            {
                if (info.Child.Left - location.X < -Step)
                {
                    separationChild(info);
                }
                else
                {
                    adsorbentChild(info);
                }
            }
            if (info.Child.Top > location.Y && info.Location == MagneticLocation.Bottom)
            {
                if (info.Child.Top - location.Y > Step)
                {
                    separationChild(info);
                }
                else
                {
                    adsorbentChild(info);
                }
            }
            else if (info.Child.Top < location.Y && info.Location == MagneticLocation.Top)
            {
                if (info.Child.Top - location.Y < -Step)
                {
                    separationChild(info);
                }
                else
                {
                    adsorbentChild(info);
                }
            }
        }
コード例 #8
0
 private void separationChild(ChildFormInfo info)
 {
     info.State = MagneticState.Separation;
 }
コード例 #9
0
 private void adsorbentChild(ChildFormInfo info)
 {
     info.State = MagneticState.Adsorbent;
     resetChildLocation(info);
 }
コード例 #10
0
 private void setChildLocation(ChildFormInfo info, int x, int y)
 {
     setChildLocation(info, new Point(x, y));
 }