using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Text;
using System.Windows.Forms;namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
  
        private void groupBox1_Paint(object sender, PaintEventArgs e)
        {            Graphics g = e.Graphics;
            Pen p = new Pen(Color.Green, 3);            Rectangle rect = new Rectangle(180, 30, 300, 129);
            SolidBrush b1 = new SolidBrush(Color.Black);
            g.FillRectangle(b1, rect);
            p.EndCap = LineCap.ArrowAnchor;
            g.DrawLine(p, 180, 161, 180, 15);
            g.DrawLine(p, 179, 159, 500, 159);            b1.Dispose();
            p.Dispose();
            g.Dispose();
        }    }
}
就是这么个简单的程序,运行以后在指定位置画了个图!!可是为什么所有画的线又基于屏幕原点又画了一遍!!

解决方案 »

  1.   

    你绘制的点 
      g.DrawLine(p, 180, 161, 180, 15); 
                g.DrawLine(p, 179, 159, 500, 159); 这样的绘制 坐标点相当与你groupBox1的位置..另外 Paint时间会一直绘制...因为Graphics直接绘制控件.当控件刷新的时候你绘制的内容就会被刷掉. 如果不想一直绘制 可以绘制到BITMAP上,然后设置到groupBox1.BackgroundImage之类的属性上就可以了.
      

  2.   

    可以先把要绘制的效果绘制到一个你新建的bitmap上,然后设置PictureBox.Image为你绘制的bitmap,一般都是这么做的。
      

  3.   

     Rectangle rect = new Rectangle(180, 30, 300, 129); 
                SolidBrush b1 = new SolidBrush(Color.Black); 
                g.FillRectangle(b1, rect); 
    问题在这儿。你这个 rect 给的坐标是基于屏幕耕牛点的,你让 g 去填充它了……
      

  4.   

    如果所有代码就只有上面那点的话不至于在其它地方画线它只是在GroupBox里面画一个坐标系,再把XY方向填充一块黑色
      

  5.   

    确实没有发现能够多次绘制的地方,
    绘制的时候可以考虑以GroupBox的坐标为基准,使用e.Bound之类的属性获得GroupBox的边界