我建了两个Form,Form1和Form2,我把这两个Form的初始位置都设成CenterScreen,除此之外我想实现用鼠标拖动其中一个Form时另一个Form也同步动,关掉其中一个Form时,另一个Form也被关掉。不知道能不能这样,如果能的话,具体怎么操作呢?最好直接上code!

解决方案 »

  1.   

    为什么不放一个窗体里呢?>??看看下面的能不能帮你把 private MoveForm m_Form1 = new MoveForm();
            private Form2 m_Form2 = new Form2();
            private Point m_Point1 = new Point(0,0);
            private Point m_Point2 = new Point(100, 100);      
            private void Form1_Load(object sender, EventArgs e)
            {
               
                m_Form1.Show();
                m_Form2.Show();            m_Form1.Location = m_Point1;
                m_Form2.Location = m_Point2;
                m_Form1.LocationChanged += new EventHandler(m_Form1_LocationChanged);
                m_Form2.LocationChanged += new EventHandler(m_Form2_LocationChanged);
                m_Form1.FormClosing += new FormClosingEventHandler(m_Form1_FormClosing);
                m_Form2.FormClosed += new FormClosedEventHandler(m_Form2_FormClosed);        }        void m_Form2_FormClosed(object sender, FormClosedEventArgs e)
            {
                m_Form1.Hide();
            }        void m_Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                m_Form2.Hide();            
            }        void m_Form2_LocationChanged(object sender, EventArgs e)
            {
                if (m_Form2.WindowState == FormWindowState.Minimized || m_Form1.WindowState == FormWindowState.Minimized) return;
                m_Form1.LocationChanged -= m_Form1_LocationChanged;
                int _MoveX = m_Form2.Location.X - m_Point2.X;
                int _MoveY = m_Form2.Location.Y - m_Point2.Y;
                m_Form1.Top += _MoveY;
                m_Form1.Left += _MoveX;
                m_Point2 = m_Form2.Location;
                m_Point1 = m_Form1.Location;
                m_Form1.LocationChanged += new EventHandler(m_Form1_LocationChanged);
            }        void m_Form1_LocationChanged(object sender, EventArgs e)
            {
                if (m_Form2.WindowState == FormWindowState.Minimized || m_Form1.WindowState == FormWindowState.Minimized) return;
                m_Form2.LocationChanged-=m_Form2_LocationChanged;     
                int _MoveX = m_Form1.Location.X - m_Point1.X;
                int _MoveY = m_Form1.Location.Y - m_Point1.Y;
                m_Form2.Top += _MoveY;
                m_Form2.Left+= _MoveX;
                m_Point1 = m_Form1.Location;
                m_Point2 = m_Form2.Location;
                m_Form2.LocationChanged += new EventHandler(m_Form2_LocationChanged);
            }       
      

  2.   

      private void Form1_Load(object sender, EventArgs e)
            {            m_Form2.TopLevel = false;
                m_Form2.Parent = this;            m_Form2.Show();
                      }这种方式不知道是不是你想要的结果.
      

  3.   

    这个不是我想要的效果,我想要的是当运行程序的时候,两个Form看起来就像是一个Form一样。
      

  4.   

    其实很简单。
    这样比如你的主Form是Form1弹出Form是Form2
    简单的写一下,写一下两个窗体挨在一起的,不挨在一起的,另一个窗体的位置固定点坐矢量相加就行了(就是坐标的变化)
    在Form1的Move事件中这样写private void Form1_Move(object sender, EventArgs e)
    {
        form2.Left = this.Right;
        form2.Top = this.Top;
    }
    当然,这是确保在Form2已经弹出,并且是非模式窗口的。