C#自定义控件 类似于Linechart
界面效果:
对外提供的属性设置
/// <summary> /// 背景色 /// </summary> public Color BackColor; /// <summary> /// 边框颜色 /// </summary> , , ); /// <summary> /// 线条颜色 /// </summary> , , ); /// <summary> /// 折线颜色 /// </summary> , , ); /// <summary> /// 是否显示控件边框 /// </summary> public bool rect_isvisable = false;
/// <summary> /// 边框线宽 /// </summary> ; /// <summary> /// 垂直线条间距 /// </summary> ; /// <summary> /// 水平线条间距 /// </summary> ; /// <summary> /// 点密度,越小越稀疏 /// </summary> private float point_density = 0.7f; #region public float Point_density { get { return point_density; } set { point_density = value; || value > ) { point_density = 0.7f; } } } public float Linewidth { get { return linewidth; } set { linewidth = value; ) { linewidth = ; } } } public int Vertical_spacing { get { return vertical_spacing; } set { ) { value = ; } vertical_spacing = value; } } public int Horizontal_spacing { get { return horizontal_spacing; } set { ) { value = ; } horizontal_spacing = value; } } #endregion
这些要保证是大于0,我使用属性了,这样比频繁的类型转换要好
绘制
protected override void OnPaint(PaintEventArgs pe) { this.drawtable(); this.drawpolygonal(); base.OnPaint(pe); } private void drawtable()//表格绘制 { if (this.rect_isvisable) { this.rectanglelinecolor = Color.Black; } else { this.rectanglelinecolor = this.BackColor; } Graphics g = this.CreateGraphics(); g.FillRectangle(new SolidBrush(this.BackColor), this.ClientRectangle); )+this.vertical_spacing;i<this.Height;i+=this.vertical_spacing) { g.DrawLine(), this.ClientRectangle.X, i, this.Width, i); } )+this.Horizontal_spacing;i<this.Width;i+=this.Horizontal_spacing) { g.DrawLine(), i,this.ClientRectangle.Y,i, this.Height); } g.DrawRectangle(, , this.Width - this.linewidth, this.Height - this.linewidth); g.Dispose(); } /// <summary> /// 折线绘制 /// </summary> private void drawpolygonal() { Point ps=new Point(); Point pe; Graphics g = this.CreateGraphics(); ,j=; i>=;i--,j++) { float f = this.polygonalpoint[i]; int w = this.Width - this.Horizontal_spacing_per_pp*j; int h = this.Height - (int)(f * this.Height); pe = ps; ps = new Point(w, h); ) { g.DrawLine(p,pe, ps); } } }
链接:http://pan.baidu.com/s/1gdjod8J
添加到自己的项目里拖进去就可以了;和普通的控件一样使用
M$自己也有更好的linechart,不过插件肯定比较大的了
C#自定义控件 类似于Linechart的更多相关文章
- MPAndroidChart Wiki(译文)~Part 2
7. 填充数据 这一章节将讲解给各式各样的图表设置数据的方法. 7.1 LineChart(线形图) 想给图表添加数据,使用如下方法: public void setData(ChartData da ...
- 自定义控件--CircleImageView(类似于QQ、微信圆形头像自定义控件)
现在基本上所有的需要用户注册的APP都有一个需要用户上传头像的需求,上传的头像基本都是类似于QQ.微信等社交应用圆形头像.最近,正在做的一个社交应用多处需要用到这种圆形头像的处理,总不能每次都对图片做 ...
- android自定义控件一站式入门
自定义控件 Android系统提供了一系列UI相关的类来帮助我们构造app的界面,以及完成交互的处理. 一般的,所有可以在窗口中被展示的UI对象类型,最终都是继承自View的类,这包括展示最终内容的非 ...
- ASP.NET MVC学习之母版页和自定义控件的使用
一.母板页_Layout.cshtml类似于传统WebForm中的.master文件,起到页面整体框架重用的目地1.母板页代码预览 <!DOCTYPE html> <html> ...
- android第一行代码-6.自定义控件的实现
0.假设一个应用中标题栏控件都是共用的,如果每个activity都需要设置button,绑定方法,那代码就会很臃肿.那我们可以自定义控件,然后继承这个控件就行了. 自定义控件为TitleLayout, ...
- android自定义控件(3)-自定义当前按钮属性
那么还是针对我们之前写的自定义控件:开关按钮为例来说,在之前的基础上,我们来看看有哪些属性是可以自定义的:按钮的背景图片,按钮的滑块图片,和按钮的状态(是开还是关),实际上都应该是可以在xml文件中直 ...
- android自定义控件(1)-点击实现开关按钮切换
自定义控件的步骤.用到的主要方法: 1.首先需要定义一个类,继承自View:对于继承View的类,会需要实现至少一个构造方法:实际上这里一共有三个构造方法: public View (Contex ...
- android 自定义控件 使用declare-styleable进行配置属性(源码角度)
android自定义styleableattrs源码 最近在模仿今日头条,发现它的很多属性都是通过自定义控件并设定相关的配置属性进行配置,于是便查询了解了下declare-styleabl ...
- c#自定义控件属性面板及选择资源设置
博客转移到 http://jacean.github.io/ 继续分享编程经验 因为要做流体布局,但两个控件没办法组合,就做自定义控件.这个控件需要一个text设置文本,一个pic设置图片显示,图片通 ...
随机推荐
- liunx 安装工具总结
1 下载相关文件,比如hadoop 2 解压文件 tar -zxcf xxx.tar.gz 3 mv xxx 到指定目录:通常安装到/usr/local 或者自己建个目录 /usr/develo ...
- 【BZOJ4908】[BeiJing2017]开车 分块
[BZOJ4908][BeiJing2017]开车 Description 你有n辆车,分别a1, a2, ..., an位置和n个加油站,分别在b1, b2, ... ,bn .每个加油站只能支持一 ...
- 常用脚本--查看死锁和阻塞usp_who_lock(转)
USE [master] GO /****** Object: StoredProcedure [dbo].[sp_who_lock] Script Date: 02/07/2014 11:51:24 ...
- 九度OJ 1010:A + B (字符串处理)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:7166 解决:3646 题目描述: 读入两个小于100的正整数A和B,计算A+B. 需要注意的是:A和B的每一位数字由对应的英文单词给出. ...
- 中文WebFont探索
本文主要讲中文webFont的相关知识,包含了业界现状.WebFont优势.实现方案等. 一 业界使用WebFont现状 1.1 英文WebFont使用现状 英文版已使用非常广泛.比较有名的字体库:G ...
- Nodejs学习笔记 --- 调用命令方法ld_process.exec()和child_process.execFile()
本文主要记录项目中使用NodeJS实现在线构建项目时,通过代码自动调用命令行. 参考资料&内容来源: Nodejs官网:http://nodejs.cn/api/child_process.h ...
- 谷歌postman插件的安装与使用
下载地址:http://pan.baidu.com/s/1kTh1g4B 安装方法: 1.下载并解压 2.解压后.打开谷歌浏览器.选择很多其它工具→扩展程序,如图 3.勾选开发人员模式 4.选择载入正 ...
- python cookbook第三版学习笔记十一:类和对象(二)调用父类的方法
在子类中调用父类的方法,可以下面的A.spam(self)的方法. class A(object): def spam(self): print 'A.spam' class ...
- servlet 复习笔记
总的说来Servlet的配置包括Servlet的名字,Servlet的类(如果是JSP,就指定JSP文件),初始化参数,启动装入的优先级,servlet的映射,运行的安全设置. 下面举例介绍其配置: ...
- git常用开发流程
我们在使用git进行项目管理时,远程仓库的分支情况一般是: master分支作为稳定版分支,用于直接发布产品,dev分支则用于日常开发 备注: 也可以只有一个master分支,这里只介绍第一种情况. ...