C# GDI+绘图(四)实现网格绘制,并填充相应的表格内容

简介: C# GDI+绘图(四)实现网格绘制,并填充相应的表格内容

这是为了实现在项目中的功能实现的一个Demo,在完成这个Demo后,我将其直接移植到了项目中,进行数据合并后,一切完美运行,

 

废话不多说,直接上图:

这里给出部分主要代码,

构造函数:

public uc_layout()
        {
            InitializeComponent();
            InitializeDrawResources();
            StartRow = startRow;
            DrawAll();
            this.SizeChanged += (s, w) =>
            {
                DrawAll();
            };
            this.MouseDown += (s, e) =>
                {
                    lastRow = e.Y / BlockHeight - 1+startRow;//确定行的位置
                    lastCol = e.X / BlockWidth - 1;
                    if (lastCol >= 0 && lastCol <= 7&&lastRow>=0&&lastRow<=63)
                    {
                        int index = 8 * (lastRow) + lastCol;//确定信号的startbit
                        if (list.Contains(index))//此处判断是否按下了信号
                        {
                            startBit = list.Min();//若是,则获取按下的信号
                            MouseIsDown = true;
                            DrawAll();
                        }
                    }
                };
            this.MouseUp += (s, e) =>
                {
                    MouseIsDown = false;
                    this.Cursor = Cursors.Default;
                };
            this.MouseMove += uc_layout_MouseMove;
        }

鼠标移动时,数据重绘,用MouseMove事件来控制,如下:

void uc_layout_MouseMove(object sender, MouseEventArgs e)
        {
            int mouseRow = e.Y / BlockHeight - 1+startRow;//确定鼠标移动到的行
            int mouseCol = e.X / BlockWidth - 1;
            if (MouseIsDown)
            {
                if (mouseRow!=lastRow||mouseCol!=lastCol)
                {
                    //lastRow = 7;
                    //lastCol = 6;
                    int difRow = mouseRow - lastRow;
                    int difCol = mouseCol - lastCol;
                    //int oldFirst = list.Min();
                    //int newFirst = oldFirst + 8 * difRow + difCol;
                    int newFirst = startBit + 8 * difRow + difCol;
                    lastRow = mouseRow;
                    lastCol = mouseCol;
                    if (this.Cursor!=Cursors.SizeAll)
                    {
                        this.Cursor = Cursors.SizeAll;
                    }
                    startBit = newFirst;
                    //if (startBit + list.Count > (startRow + 8) * 8 - 1)                    if (startBit > (startRow + 8) * 8 - 1)                    {
                        if (startRow<maxRow-8)
                        {
                            startRow++;
                        }
                    }
                    else if (startBit<startRow*8)
                    {
                        if (startRow>0)
                        {
                            startRow--;
                        }
                    }
                    list.Clear();
                    for (int i = 0; i < 6; i++)
                    {
                        list.Add(startBit + i);
                    }
                    DrawAll();
                }
            }
        }

以及画笔初始化代码

GrayBrush_G = new SolidBrush(Color.FromArgb(200, 200, 200));
            OrangeBrush_G = new SolidBrush(Color.FromArgb(190, 165, 210));
            DeepGrayBrush_G = new SolidBrush(Color.FromArgb(50, 50, 50));
            BlackBrush_G = new SolidBrush(Color.Black);
            BigFont_G = new Font("宋体", 12, FontStyle.Bold);
            SmallFont_G = new Font("宋体", 10);
            OverLayFont_G = new Font("宋体", 10, FontStyle.Bold);
            GrayPen_G = new Pen(Color.FromArgb(200, 200, 200), 1);
            BlackPen_G = new Pen(Color.FromArgb(0, 0, 0), 1);
            CenterSF_G = new StringFormat() { LineAlignment = StringAlignment.Center, Alignment = StringAlignment.Center, FormatFlags = StringFormatFlags.NoWrap, Trimming = StringTrimming.Character };

想要进阶学习的,可以在这里C# GDI+实现网格绘制,并显示内容 进行下载,项目编译通过,vs2012编写,下载有问题的,可以联系我。

这里给出得是升级版,通过滚动条来控制显示的行数,使绘制的表格动态刷新,可下载得代码中包含前三篇中的代码案例。

相关文章
|
6月前
|
SQL 安全 API
C# 读取Word表格到DataSet
C# 读取Word表格到DataSet
|
6月前
|
存储 SQL C#
C# 读取二维数组集合输出到Word预设表格
C# 读取二维数组集合输出到Word预设表格
C# GDI+绘图(三)GDI+实现QQ截图类似功能
C# GDI+绘图(三)GDI+实现QQ截图类似功能
C# GDI+绘图(二)进阶---Pen/Brush以及坐标轴平移和旋转等
上一篇C# GDI+绘图(一)GDI+介绍及基础,我们介绍了,GDI+的基础,这篇我们对其进阶内容进行学习,分别为Pen/Brush以及坐标轴操作
|
C# 图形学
C# GDI+绘图(一)GDI+介绍及基础
最近,项目中,有一块比较发杂的网格,并在网格上绘有各种颜色和文本,在Dev库中并未找到能实现这种功能的现有或可以二次开发的控件,因此,涉及到GDI+绘图这块陌生的领域。下面即时我在本次学习过程中的笔记,本次内容一共分为4篇,分别都有各自的代码或工程文件提供,有需要的朋友可以下载。
|
程序员 C# 图形学
使用 C# Graphics 绘图来绘制一个足球
2022卡塔尔世界杯是足球爱好者的狂欢,这与我毫无关系,作为一个缺乏运动的人,还是不要去看人家玩命的运动了。虽然不看球,不过这波热度的持续冲击,还是让我在朋友圈刷到了结局 ———— 球王梅西如愿以偿捧得金杯,后起之秀姆巴佩加冕金靴。但作为程序员,为了增加一些参与感我就拿 C# 画个足球图案吧。
210 0
使用 C# Graphics 绘图来绘制一个足球
|
C# 图形学
C#之深入理解GDI+绘制圆弧及圆角矩形等比缩放的绘制
GDI+中对于圆弧的绘制,是以给定的长方形(Rectangle`结构)为边界绘制的椭圆的一部分形成的圆弧。绘制的圆弧的中心为长方形内切椭圆的圆心(如果是正方形,则正方形的...
619 0
C#之深入理解GDI+绘制圆弧及圆角矩形等比缩放的绘制
|
人工智能 C#
c#中在datagridview的表格动态增加一个按钮方法
c#中在datagridview的表格动态增加一个按钮方法,如果想要这一套教程的可以移步去这里 《期末作业C#实现学生宿舍管理系统》,对了最近我们有一个人工智能交流群,如果大家对代码有问题,想交流的可以进群,私聊我就可以了! 效果图片 : 在Load事件中写入代码 那ui有了功能怎么办呢?别急我们在 dataGridView1_CellContentClick事件中添加方法 这样的话 我们就可以点击对应行的修改来获取到id的值这里有一个bug就是第三行没数据需要隐藏,现在还没有解决,欢迎大家指出!.....
669 0
c#中在datagridview的表格动态增加一个按钮方法
C#编程-128:GDI绘图基础知识
C#编程-128:GDI绘图基础知识
106 0
C#编程-128:GDI绘图基础知识
|
21天前
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
30 3