winform 有GDI+画表格

来源:互联网 发布:淘宝上的灯具质量好吗 编辑:程序博客网 时间:2024/06/11 05:04

 今天,看到群里有一位朋友正在做一个连连看的小游戏需要用到,在窗体上画表格。闲来没事也想回忆一下GDI+的知识,就是这做了一下,反正也不难先在把demo拿出来与大家分享(高手无喷,行列数可以调):

学C#也有一段时间了,最近在写一个项目时需要在用户单击窗体的关闭按钮时弹出 确定对话框的功能。自己在网上找了很多方法都不太理想。如果,使用窗体的FormClosing事件,在用户单击取消后窗体照样会被关闭!所以,这个方法显然不是很好。最后使用windows 消息机制的方法达到了设计要求。下面我将核心代码发上来,高手可以走过:


protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
this.drawWang(5,5);
}
Point[] sP; //上边界
Point[] xP; //下边界
Point[] zP; //左边界
Point[] yP; //右边界

/// <summary>
/// 绘制表格的方法
/// </summary>
/// <param name="xc">行的数量</param>
/// <param name="yc">列的数量</param>
private void drawWang(int xc, int yc)
{
int W = this.Width;
int H = this.Height;
Graphics g = this.CreateGraphics();
Rectangle r = new Rectangle(10, 10, W - 30, H - 60);
g.DrawRectangle(new Pen(Brushes.Red, 2.0f), r);
int recCountX = xc;
int recCountY = yc;
Point[] sP = new Point[recCountX]; //Up
Point[] xP = new Point[recCountX]; //down
Point[] zP = new Point[recCountY]; //left
Point[] yP = new Point[recCountY]; //regit
int cW = (int)r.Width / recCountX; //每个格子的长
int cH = (int)r.Height / recCountY; //每个格子的宽
for (int i = 0; i < recCountX - 1; i++)
{
int pX = r.X + cW + cW * i; //计算边上点的坐标的方法

Point p = new Point(pX, r.Y);
sP[i] = p;
}
for (int i = 0; i < recCountX - 1; i++)
{
int pX = r.X + cW + cW * i;

Point p = new Point(pX, r.Y + r.Height);
xP[i] = p;
}
for (int i = 0; i < recCountY - 1; i++)
{
int pY = r.Y + cH + cH * i;

Point p = new Point(r.X, pY);
zP[i] = p;
}
for (int i = 0; i < recCountY - 1; i++)
{
int pY = r.Y + cH + cH * i;

Point p = new Point(r.X + r.Width, pY);
yP[i] = p;
}
for (int i = 0; i < recCountX - 1; i++)
{
g.DrawLine(new Pen(Brushes.Red, 2.0f), sP[i], xP[i]);
}
for (int i = 0; i < recCountY - 1; i++)
{
g.DrawLine(new Pen(Brushes.Red, 2.0f), zP[i], yP[i]);
}
g.Dispose();
}
private void Form1_SizeChanged(object sender, EventArgs e)
{
this.Refresh(); //改变窗体大小时刷新
}