怎样用c#画图形,例如:矩形。

 我来答
rumbusapple
推荐于2017-12-15 · TA获得超过356个赞
知道小有建树答主
回答量:456
采纳率:0%
帮助的人:297万
展开全部
绘制矩形
用 GDI+ 绘制矩形与绘制直线类似。若要绘制矩形,需要 Graphics 对象和 Pen 对象。Graphics 对象提供 DrawRectangle 方法,Pen 对象存储属性(例如线宽和颜色)。将 Pen 对象作为参数之一传递给 DrawRectangle 方法。下面的示例绘制了一个矩形,其左上角位于 (100, 50),宽度为 80,高度为 40:
myGraphics.DrawRectangle(myPen, 100, 50, 80, 40);

DrawRectangle 是 Graphics 类的一个重载方法,因此,有数种为其提供参数的方式。例如,可构造 Rectangle 对象并将 Rectangle 对象作为参数传递给 DrawRectangle 方法:
Rectangle myRectangle = new Rectangle(100, 50, 80, 40);
myGraphics.DrawRectangle(myPen, myRectangle);

Rectangle 对象具有用于处理和收集矩形相关信息的方法和属性。例如,Inflate 和 Offset 方法可更改矩形的大小和位置。IntersectsWith 方法判断矩形是否与另一给定矩形相交,Contains 方法判断一个给定点是否在该矩形内。

具体代码:
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Collections.Generic;

namespace ReverseArray
{
public partial class Form1 : Form
{
private bool mouseStatus = false;//鼠标状态,false为松开
private List<Rectangle> rectList = new List<Rectangle>();//存储所有画过的矩形
private Point startPoint;//鼠标按下的点
private Point endPoint;//
private Rectangle currRect;//当前正在绘制的举行
private int minStartX, minStartY, maxEndX, maxEndY;//最大重绘矩形的上下左右的坐标,这样重绘的效率更高。
public Form1()
{
InitializeComponent();
}

private void Form1_MouseDown(object sender, MouseEventArgs e)
{
mouseStatus = true;
startPoint.X = e.X;
startPoint.Y = e.Y;
//重新一个矩形,重置最大重绘矩形的上下左右的坐标
minStartX = e.X;
minStartY = e.Y;
maxEndX = e.X;
maxEndY = e.Y;
}

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (mouseStatus)
{
endPoint.X = e.X; endPoint.Y = e.Y;
//这一段是获取要绘制矩形的上下左右的坐标,如果不这样处理的话,只有从左上开始往右下角才能画出矩形。
//这样处理的话,可以任意方向,当然中途可以更换方向。
int realStartX = Math.Min(startPoint.X, endPoint.X);
int realStartY = Math.Min(startPoint.Y, endPoint.Y);
int realEndX = Math.Max(startPoint.X, endPoint.X);
int realEndY = Math.Max(startPoint.Y, endPoint.Y);

minStartX = Math.Min(minStartX, realStartX);
minStartY = Math.Min(minStartY, realStartY);
maxEndX = Math.Max(maxEndX, realEndX);
maxEndY = Math.Max(maxEndY, realEndY);

currRect = new Rectangle(realStartX, realStartY, realEndX - realStartX, realEndY - realStartY);
//一下是为了获取最大重绘矩形。
Rectangle refeshRect = new Rectangle(minStartX, minStartY, maxEndX - minStartX, maxEndY - minStartY);
refeshRect.Inflate(1, 1);//重绘矩形的大小扩展1个单位
this.Invalidate(refeshRect);//失效一个区域,并使其重绘。
}
}

private void Form1_MouseUp(object sender, MouseEventArgs e)
{
mouseStatus = false;
endPoint.X = e.X; endPoint.Y = e.Y;
int realStartX = Math.Min(startPoint.X, endPoint.X);
int realStartY = Math.Min(startPoint.Y, endPoint.Y);
int realEndX = Math.Max(startPoint.X, endPoint.X);
int realEndY = Math.Max(startPoint.Y, endPoint.Y);
currRect = new Rectangle(realStartX, realStartY, realEndX - realStartX, realEndY - realStartY);
rectList.Add(currRect);//当前矩形算是被认可了,所以存起来
this.Invalidate();//重绘整个界面
}
private void Form1_Paint(object sender, PaintEventArgs e)//处理重绘情况
{
Graphics g = e.Graphics;
g.Clear(this.BackColor);
g.DrawRectangle(new Pen(Color.Red, 1), currRect);
foreach (Rectangle rect in rectList)
g.DrawRectangle(new Pen(Color.Red, 1), rect);
}
}
}
追问
非常感谢,能加你QQ吗?
百度网友4e12581
2012-04-17
知道答主
回答量:19
采纳率:0%
帮助的人:16.6万
展开全部
使用GDI、GDI+中的函数
g.DrawRectangle
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
OO悠悠我心OO
2012-04-17 · 超过18用户采纳过TA的回答
知道答主
回答量:48
采纳率:0%
帮助的人:51.8万
展开全部
http://zhidao.baidu.com/question/394769292.html?oldq=1
这是我以前回答的 你自己看看吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式