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();
} }
}
就是这么个简单的程序,运行以后在指定位置画了个图!!可是为什么所有画的线又基于屏幕原点又画了一遍!!
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();
} }
}
就是这么个简单的程序,运行以后在指定位置画了个图!!可是为什么所有画的线又基于屏幕原点又画了一遍!!
g.DrawLine(p, 180, 161, 180, 15);
g.DrawLine(p, 179, 159, 500, 159); 这样的绘制 坐标点相当与你groupBox1的位置..另外 Paint时间会一直绘制...因为Graphics直接绘制控件.当控件刷新的时候你绘制的内容就会被刷掉. 如果不想一直绘制 可以绘制到BITMAP上,然后设置到groupBox1.BackgroundImage之类的属性上就可以了.
SolidBrush b1 = new SolidBrush(Color.Black);
g.FillRectangle(b1, rect);
问题在这儿。你这个 rect 给的坐标是基于屏幕耕牛点的,你让 g 去填充它了……
绘制的时候可以考虑以GroupBox的坐标为基准,使用e.Bound之类的属性获得GroupBox的边界