C#画表格

下面给一个简单的例子,至于多个单元格合并,请自己去实现,也就是坐标计算的事情。

至于画图,用GDI,还是DirectX画,自己选择,不过这里主要讲的是算法:坐标计算以及画的过程。

注意不要每个列都画一个矩形,很浪费的,因为都重叠了。

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

using
System;

using
System.Drawing;

using
System.Windows.Forms;

namespace
GDITableDemo {

    public
partial class Form1 : Form {

        public
Form1() {

            InitializeComponent();

        }

        private
void button1_Click(object
sender, EventArgs e) {

            string[] columns = textBox1.Text.Split(‘,‘);

            Font font = panel1.Font;//字体

            Brush color = Brushes.Black;//颜色

            Brush border = new
SolidBrush(panel1.ForeColor);//用前景色画边框

            Pen borderStyle =new
Pen(border, 1);

            

            //从什么位置开始画

            float
top = 0F;//Y坐标

            float
left = 0F;//X坐标

            //画笔X坐标偏移量,left1:最后一次位置,left2当前最远位置

            float
left1 = left, left2 = 0F;

            float
textLeft=0F;//文本X坐标

            float
textTop = 0F;//文本Y坐标

            float
textWidth=0F;//文本宽度

            float
textHeight=0F;//文本高度

            const
float columnHeight = 30F;//行高,包括边框在内

            const
float columnPadding = 10F;//每一列左右多出10像素

            Graphics g = Graphics.FromHwnd(panel1.Handle);

            textHeight = font.GetHeight(g);//高

            textTop = (columnHeight - textHeight) / 2;//上边

            for
(int
i = 0; i < columns.Length; i++) {

                //先计算文本

                textWidth= g.MeasureString(columns[i],font).Width;//宽

                textLeft = left1 + columnPadding;//左边

                left2=textLeft+textWidth+columnPadding;

                //先画左边框

                g.DrawLine(borderStyle, left1, top, left1, columnHeight);

                //画文字

                g.DrawString(columns[i], font, color, textLeft, textTop);

                //注意左边的位置要开始偏移了

                left1 = left2;

            }

            g.DrawLine(borderStyle, left, top, left2, top);//上边框

            g.DrawLine(borderStyle, left, columnHeight, left2, columnHeight);//下边框

            g.DrawLine(borderStyle, left2, top, left2, columnHeight);//右边框

        }

    }

}

C#画表格,布布扣,bubuko.com

时间: 2024-11-03 21:31:37

C#画表格的相关文章

蓝桥杯 画表格

在中文Windows环境下,控制台窗口中也可以用特殊符号拼出漂亮的表格来. 比如: ┌─┬─┐ │  │  │ ├─┼─┤ │  │  │ └─┴─┘ 其实,它是由如下的符号拼接的: 左上 = ┌ 上 =  ┬ 右上 =  ┐ 左 =  ├ 中心 =  ┼ 右 =  ┤ 左下=  └ 下 =  ┴ 右下 =  ┘ 垂直 =  │ 水平 =   ─ 本题目要求编写一个程序,根据用户输入的行.列数画出相应的表格来. 例如用户输入: 3 2 则程序输出: ┌─┬─┐ │  │  │ ├─┼─┤ │  

IOS 用drawRect 画表格

自定义一个View DrawLine DrawLine.h #import <UIKit/UIKit.h> @protocol gridTouchDelete <NSObject> - (void)gridTouchColumn:(NSInteger)column touchRow:(NSInteger)row; @end @interface DrawLine : UIView @property(nonatomic, assign) id<gridTouchDelete&

Latex 各种处理论文操作-插图、插表格

Latex插入图片 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 如何做到自己控制图片在latex中的位置? 在 \begin{figure} 后面加参数 [h!] 即 \begin{figure}[h!] % Requires \includegraphics[width=]{}\\ \caption{} \label{} \end{figure} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

jQuery EasyUI datagrid列名包含特殊字符会导致表格错位

首先申明:本文所述的Bug存在于1.3.3以及更高版本中,其它低版本,本人未测试,太老的版本不想去折腾了. 洒家在写前端的SQL执行工具时,表格用了 jQuery EasyUI datagrid,因为用户的SQL是千奇百怪的,所以出现了诸如:"BLOCKS*8/1024","trunc(SYSDATE)"之类的列名(field)时,表格就会错位,而且含有特殊字符的列无法手工调整大小. 经分析,datagrid组件在画表格的时候会在宿主DOM后动态追加一个style节

ueditor表格边框没有颜色的解决

问题: 用ueditor画表格,会发现表格存在,但是表格边框没有颜色. 解决方法: 需要对js文件中的样式进行修改,这里我引用的编辑器样式文件是ueditor.all.min.js,所以先找到该文件,有三个部分需要修改.注意:不同版本的js代码可能会有细微不同. 1.搜索到下面部分: c.push('<td width="'+b+'" vAlign="'+a.tdvalign+'" >'+(r.ie?e.fillChar:"<br/>

好用的自适应表格插件-bootstrap table (支持固定表头)

最近工作中找到了一款十分好用的表格插件,不但支持分页,样式,搜索,事件等等表格插件常有的功能外,最主要的就是他自带的冻结表头功能,让开发制作表格十分容易,不过网上大多都是英文文档,第一次使用会比较麻烦,因此在此记录一些简单的使用方式,方便扩展学习 首先是简单的页面形式,大家可以按照平常画表格的方式来创建html表格,然后通过js控制特殊的样式等操作(优点是表格更加直观,方便调整表格样式等,速度快) 当然,也可以只在页面上放一个table标签,之后的所有数据和样式都通过js控制也是可以的,后面会说

典型用户和场景

分析我们psp表的典型用户和场景 老师: (1)姓名:王建民 (2)年龄:35 (3)收入:不详 (4)代表的用户在市场上的比例和重要性:我们软件针对于信息学院学生,比例大概为1:200,老师是检查学生能力的人员,是不可或缺的存在. (5)使用这个软件的典型场景:查看学生最近的个人能力记录. (6)使用本软件/服务的环境 :学校,公交,任何地点 (7)生活/工作情况:学校工作 (8)知识层次和能力(教育程度,对电脑.万维网的熟悉程度):博士学位,对电脑熟练掌握,能编程,能力很强. (9)用户的动

unicode,ansi,utf-8,unicode big endian编码的区别

作者:于洋链接:https://www.zhihu.com/question/23374078/answer/69732605来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们看到8个开关状态是好的,于是他们把这称为"字节".再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出很多状态,状态开始变来变去.他们看到这样是好的,于是它们就这

字符编码格式

一.编码历史与区别 一直对字符的各种编码方式懵懵懂懂,什么ANSI UNICODE UTF-8 GB2312 GBK DBCS UCS--是不是看的很晕,假如您细细的阅读本文你一定可以清晰的理解他们.Let's Go! 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们看到8个开关状态是好的,于是他们把这称为"字节". 再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出很多状态,状态开始变来变去.他们看到这样是好