因为研究CodeCombat上的最后一题,自己尝试分解题目,然后想到需要画网格,还有最优化的方法

源代码如下

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace DrawGrid
{
public partial class Form1 : Form
{
int multiple = ;
int width = ;
int height = ;
int w = ;
int h = ;
Pen bluePen = new Pen(Color.Black); public Form1()
{
InitializeComponent();
} private void Form1_Paint(object sender, PaintEventArgs e)
{
Console.WriteLine("Form长:{0},宽:{1}", this.Width, this.Height);
this.Multiple();
DrawGrid(width, height, w, h, e); List<Rectangle> l = new List<Rectangle>();
Rectangle r;
r = new Rectangle(, w, * w, h); l.Add(r);
r = new Rectangle( * w, , * w, h); l.Add(r);
r = new Rectangle( * w, * w, * w, h); l.Add(r);
foreach (Rectangle r1 in l)
{
e.Graphics.FillRectangle(new SolidBrush(Color.Black), r1);
}
} /// <summary>
/// 将比例放大
/// </summary>
private void Multiple()
{
width = width * multiple;
height = height * multiple;
w = w * multiple;
h = h * multiple;
} private void Form1_MouseDown(object sender, MouseEventArgs e)
{
Console.WriteLine("X={0},Y={1}", e.X, e.Y);
} /// <summary>
/// 画网格
/// </summary>
/// <param name="width"></param>
/// <param name="height"></param>
/// <param name="w"></param>
/// <param name="h"></param>
private void DrawGrid(int width, int height, int w, int h, PaintEventArgs e)
{
Point p1 = new Point();
Point p2 = new Point(); p1.X = ; p2.X = width;
for (int y = ; y <= height; y = y + h)
{
p1.Y = y; p2.Y = y;
DrawLine(p1, p2, e);
}
p1.Y = ; p2.Y = height;
for (int x = ; x <= width; x = x + w)
{
p1.X = x; p2.X = x;
DrawLine(p1, p2, e);
}
} /// <summary>
/// 画直线
/// </summary>
/// <param name="p1"></param>
/// <param name="p2"></param>
private void DrawLine(Point p1, Point p2, PaintEventArgs e)
{
e.Graphics.DrawLine(bluePen, p1, p2);
}
}
}

自己的测试图片如上图,是一个5*4的网格;

有三个地方已经被填充了。

剩下空白的地方,需可以用矩形填充。

考虑使用最少的矩形填充,应该就是4个矩形了。一目了然。

不过,如果考虑用程序实现的话,就复杂了。以后再尝试

WinForm画网格并填充颜色的更多相关文章

  1. Winform中设置ZedGraph的颜色填充使用Fill

    场景 Winforn中设置ZedGraph曲线图的属性.坐标轴属性.刻度属性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  2. HTML5填充颜色的fillStyle测试

    效果:http://hovertree.com/texiao/html5/canvas/1/ 代码: <html> <head> <meta http-equiv=&qu ...

  3. winform设置button的边框颜色,或取消边框颜色,不显示边框

    // winform设置边框颜色不像webform那么简单,可以通过设置FlatAppearance,也可以通过重绘实现. 一.设置按钮本身属性 buttonBubufx.FlatStyle = Fl ...

  4. excel如何设置输入数字后单元格自动填充颜色

    在使用excel的过程中,有时需要在输入数字时,突出显示这些单元格,突出显示可以用有填充颜色的单元格来表示.为了实现这样的效果,需要借助excel的条件格式. 工具/原料 电脑 Excel 2010 ...

  5. Android 绘制一个Loading动画__向图片中缓慢填充颜色,从而形成动画效果

    需求:制作一个加载动画,向一个不规则图片图形中从从下到上依次填充颜色,形成动画效果. 效果如下:     代码如下: LoadingAnimatorView.java package cn.yw.li ...

  6. VBA对指定单元格填充颜色并且赋值

    使用VBA对指定的单元格赋值并填充颜色 ====================================================== 代码区域 ==================== ...

  7. 怎样将Excel包含某字符的单元格填充颜色

    在处理数据的时候,xmyanke想将Excel中包含某字符的单元格填充蓝色,比较容易看清,弄了好一阵子都没完成,最后试用条件格式处理了一下,终于实现了. 比如要将A1到A12区间包含数字1的单元格填充 ...

  8. Excel的单元格设置下拉选项并填充颜色

    如何在Excel的单元格中加入下拉选项   方法/步骤     第一步:打开excel文档,选中需加入下拉选项的单元格.      第二步:点击菜单中的“数据”->“数据有效性”->“数据 ...

  9. C#中画三角形和填充三角形的简单实现

    C#中画三角形和填充三角形的简单实现: private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graph ...

随机推荐

  1. River Crossing---河南省第六届大学生程序设计竞赛

    题目描述 Afandi is herding N sheep across the expanses of grassland  when he finds himself blocked by a ...

  2. 洛谷P3243 [HNOI2015]菜肴制作 拓扑排序+贪心

    正解:拓扑排序 解题报告: 传送门! 首先看到它这个约束就应该要想到拓扑排序辣QwQ 首先想到的应该是用优先队列代替队列,按照节点编号排序 然后也很容易被hack:<5,1> 正解应为5, ...

  3. oracle( 0 )事务

    一.并发引起的问题 脏读:能读取未提交的数据 不可重复读:T1事务读取数据后,T2事务执行更新操作,使T1无法再现前一次读取的结果.分三种情况: 1.值不同 2.少了记录 3.多了记录 幻象读(后两种 ...

  4. redis连接池的标准用法:

    from .conf import HOST, PORT, POOL_NAME import redis redis_pool = redis.ConnectionPool(host=HOST, po ...

  5. python 基础 列表生成式 生成器

    列表生成式 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式 举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, ...

  6. linux上mysql安装详细教程

    所有平台的MySQL下载地址为: MySQL 下载. 挑选你需要的 MySQL Community Server 版本及对应的平台. MySQL - MySQL服务器.你需要该选项,除非你只想连接运行 ...

  7. HBase-0.95.1源码分析之split

    split操作执行的是将HBase中较大的Region分为两个.因为split比较耗时,因此split是在独立的线程中完成的,相关类是CompactSplitThread. 首先,CompactSpl ...

  8. AMR格式语音采集/编码/转码/解码/播放

    1.opencore-amr源码下载 https://sourceforge.net/projects/opencore-amr/files/opencore-amr/ 2.opencore-amr编 ...

  9. ArrayList序列化

    ArrayList源代码中的 private transient E[] elementData; 声明为transient,为什么还可以序列化成功呢? ArrayList重写了 private vo ...

  10. [LeetCode] 310. Minimum Height Trees_Medium tag: BFS

    For a undirected graph with tree characteristics, we can choose any node as the root. The result gra ...