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

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

 

废话不多说,直接上图:

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

这里给出部分主要代码,

构造函数:

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 (startRow0)
                        {
                            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编写,下载有问题的,可以联系我。

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

关注下方公众号,回复GDI+网格绘制 或 截图 即可免费获取源代码


--------------------------------------

公众号:攻城狮客栈

CSDN:画鸡蛋的不止达芬奇

 

更多精彩内容,请微信搜索攻城狮客栈 或扫描下方二维码

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

让我们一起变的更优秀。


 

 

 

你可能感兴趣的:(学习笔记)