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设置图片显示,图片通 ...
随机推荐
- js 检测客户端网速
<!doctype html> <html> <head> <meta http-equiv=Content-Type content="text/ ...
- SERVICE_STATUS结构各成员解析
在编写Windows服务的时候,需要调用API函数::SetServiceStatus()向服务控制管理器(SCM)提交更新当前服务的状态信息,其第2个参数为指向SERVICE_STATUS结构的指针 ...
- HTML5,不仅仅是看上去非常美(第二弹:打造最美3D机房)
前言 近期项目开发任务告一段落,刚好有时间整理这大半年的一些成果.使用html5时间还不久,对js的认识还不够深入.没办法,曾经一直搞java,对js的一些语言特性和概念一时还转换只是来. 上一篇第一 ...
- iOS上使用自定义ttf字体
本文转载至 http://blog.csdn.net/allison162004/article/details/38777777 项目中想使用第三方的字体,在stackoverflow上查询解决办法 ...
- 九度OJ 1158:买房子 (基础题)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1801 解决:1096 题目描述: 某程序员开始工作,年薪N万,他希望在中关村公馆买一套60平米的房子,现在价格是200万,假设房子价格以每 ...
- vs2013工程下的各个文件和文件夹的作用
1 ipch文件夹 用来加速编译,里面存放的是precompiled headers,即预编译好了的头文件. 头文件也是需要编译的,比如需要处理#ifdef,需要替换宏以及需要include其它头文件 ...
- apache 301重定向到带www的二级域名
Options +FollowSymlinks RewriteEngine on rewritecond %{http_host} ^nlike.cn [nc] rewriterule ^(.*)$ ...
- 利用wrapper注冊的 java服务起动超时的解决方法
使用Java Service Wrapper能够把java程序注冊为一个系统服务,可是在启动服务的某些情况下会抛出例如以下错误: ERROR | wrapper | 2014/06/11 08:4 ...
- 详解单页面路由的几种实现原理(附demo)
前言 路由是每个单页面网站必须要有的,所以,理解一下原理,我觉得还是比较重要的. 本篇,基本不会贴代码,只讲原理,代码在页底会有githup地址,主意,一定要放在服务本地服务器里跑(因为有ajax), ...
- turbolink 造成 link_to异常
link_to 点击之后不刷新不加载文件 send_file 只能在浏览器中打开,而不能下载 解决方法:注释gem turbolink,application.js 中移除turbolink