C#如何在MDIParent窗体里的2个子窗体间画一条连线,连线以每个子窗体的中心为起点或结束点,当窗体拖动时连线也改变??

解决方案 »

  1.   

    用到的代码
    出现个问题,一个是只要有base.OnPaint(e)就会出现StackOverflowException异常,去掉的话没有线
            private void MDIParentDevices_Paint(object sender, PaintEventArgs e) //窗体重绘处理
                //protected override void OnPaint(PaintEventArgs e)
            { 
                base.OnPaint(e);
                //Console.WriteLine("daomei");
                DrawAllLines(e);
            }
        private class ControlLists
        {        
           public IntPtr control1;
           public IntPtr control2;
        }
        private static ArrayList DeviceDrawLines = new ArrayList();
        public static void DrawAllLines(PaintEventArgs pe)
        {
            try
            {
                foreach (ControlLists one in DeviceDrawLines)
                {
                    Control control1 = Form.FromHandle(one.control1);
                    Control control2 = Form.FromHandle(one.control2);
                    Point pta = new Point(control1.Location.X + control1.Width / 2, control1.Location.Y + control1.Height / 2);
                    Point ptb = new Point(control2.Location.X + control2.Width / 2, control2.Location.Y + control2.Height / 2);
                    Random random = new Random();
                    Graphics g = pe.Graphics;
                    
                    Pen p = new Pen(Color.FromArgb(85, random.Next(0, 255), random.Next(0, 255), random.Next(0, 255)), 3);
                    g.DrawLine(p, pta, ptb);
                }
            }
            catch (NullReferenceException err)
            {        }
      

  2.   

     foreach (ControlLists one in DeviceDrawLines)
                {
                    Control control1 = Form.FromHandle(one.control1);
                    Control control2 = Form.FromHandle(one.control2);
                    Point pta = new Point(control1.Location.X + control1.Width / 2, control1.Location.Y + control1.Height / 2);
                    Point ptb = new Point(control2.Location.X + control2.Width / 2, control2.Location.Y + control2.Height / 2);
                    Random random = new Random();
                    Graphics g = pe.Graphics;
                    
                    Pen p = new Pen(Color.FromArgb(85, random.Next(0, 255), random.Next(0, 255), random.Next(0, 255)), 3);
                    g.DrawLine(p, pta, ptb);
                }同意楼上
      

  3.   

    其实你可以在MDI主窗体上画。