winform 有GDI+画表格

 今天,看到群里有一位朋友正在做一个连连看的小游戏需要用到,在窗体上画表格。闲来没事也想回忆一下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(); //改变窗体大小时刷新
}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值