public partial class Form3 : 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 Form3()
{
InitializeComponent();
} public string chang = "";
public string kuang = "";
public string mianji = "";
public string mianjidaibiao = "";
private void Form3_Load(object sender, EventArgs e)
{
label3.Text = chang;
label5.Text = kuang;
label9.Text = mianji;
label7.Text = mianjidaibiao;
} private void button1_Click(object sender, EventArgs e)
{
Graphics G = this.CreateGraphics();
Pen P1 = new Pen(Color.Black, 1);
int changdu, kuandu, bilidu;
int hangshu, lieshu;
bilidu=Convert.ToInt32(textBox1.Text);
changdu = Convert.ToInt32(chang) / bilidu;
kuandu = Convert.ToInt32(kuang) / bilidu;
hangshu = Convert.ToInt32(textBox3.Text);
lieshu = Convert.ToInt32(textBox2.Text);
Rectangle R1 = new Rectangle(15, 130, changdu, kuandu);
G.DrawRectangle(P1, R1);
for (int i = 0; i < 15 + changdu; i += changdu / lieshu)
{
G.DrawLine(P1, 15 + i, 130, 15 + i, 130 + kuandu);
}
for (int j = 0; j < 130 + kuandu; j += kuandu / hangshu)
{
G.DrawLine(P1, 15, 130 + j, 15 + changdu, 130 + j);
}
} private void Form3_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 Form3_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 Form3_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 Form3_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);
}
{
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 Form3()
{
InitializeComponent();
} public string chang = "";
public string kuang = "";
public string mianji = "";
public string mianjidaibiao = "";
private void Form3_Load(object sender, EventArgs e)
{
label3.Text = chang;
label5.Text = kuang;
label9.Text = mianji;
label7.Text = mianjidaibiao;
} private void button1_Click(object sender, EventArgs e)
{
Graphics G = this.CreateGraphics();
Pen P1 = new Pen(Color.Black, 1);
int changdu, kuandu, bilidu;
int hangshu, lieshu;
bilidu=Convert.ToInt32(textBox1.Text);
changdu = Convert.ToInt32(chang) / bilidu;
kuandu = Convert.ToInt32(kuang) / bilidu;
hangshu = Convert.ToInt32(textBox3.Text);
lieshu = Convert.ToInt32(textBox2.Text);
Rectangle R1 = new Rectangle(15, 130, changdu, kuandu);
G.DrawRectangle(P1, R1);
for (int i = 0; i < 15 + changdu; i += changdu / lieshu)
{
G.DrawLine(P1, 15 + i, 130, 15 + i, 130 + kuandu);
}
for (int j = 0; j < 130 + kuandu; j += kuandu / hangshu)
{
G.DrawLine(P1, 15, 130 + j, 15 + changdu, 130 + j);
}
} private void Form3_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 Form3_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 Form3_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 Form3_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);
}
解决方案 »
- datagridview中写了click事件代码,但是设计时双击表格,还是默认编辑 cellcontentclick 事件?
- aspnetpage跟datagrid运用时,datagrid显示数据到了第二页时,数据出不来,请问怎么处理这个问题?
- C#如何获取C++传的指针
- 请教:登录界面的问题~~
- 串口通讯问题(已关闭 Safe handle)
- 我怎么在网页上无操作数据库
- 請教winfrom中如何為DataGrid的列頭添加單擊事件?
- starocrm 是怎么做的
- 二进制文件读写问题
- 非常基础问题:int 转换成 string 谢谢
- [C#] C#调用C语言编写的DLL时遇到的结构体问题
- 谁用过DotNetBar控件的进来看看啊
changdu:长度 kuandu:宽度 bilidu:??
hangshu:行数 lieshu:列数在绘制了n个矩形后,你到底要实现怎样的功能?
button1是干什么用的?
分块是指要在一个矩形内部绘制网格吗?
{
Pen P1 = new Pen(Color.Black, 1);
int changdu, kuandu, bilidu;
int hangshu, lieshu;
bilidu = Convert.ToInt32(textBox1.Text);
changdu = Convert.ToInt32(chang) / bilidu;
kuandu = Convert.ToInt32(kuang) / bilidu;
hangshu = Convert.ToInt32(textBox3.Text);
lieshu = Convert.ToInt32(textBox2.Text);
Rectangle R1 = new Rectangle(15, 130, changdu, kuandu);
Bitmap bitmap = new Bitmap(this.Width, this.Height);
Graphics G = Graphics.FromImage(bitmap);
G.DrawRectangle(P1, R1); for (int i = 0; i < 15 + changdu; i += changdu / lieshu)
{
G.DrawLine(P1, 15 + i, 130, 15 + i, 130 + kuandu);
}
for (int j = 0; j < 130 + kuandu; j += kuandu / hangshu)
{
G.DrawLine(P1, 15, 130 + j, 15 + changdu, 130 + j);
}
this.BackgroundImageLayout = ImageLayout.None;
this.BackgroundImage = bitmap; }