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设置图片显示,图片通 ...
随机推荐
- MySQL 优化1
系统在应用时间很长的情况下会慢慢变得很慢,无论是人还是机器为了更好的工作和学习都需要适当学习.数据库也是一样的用久了, 自然就会产生空间碎片,需要我们都i数据库中的数据块进行维护和整理.下面以实例来说 ...
- Tensorflow教程
中文社区 tensorflow笔记:流程,概念和简单代码注释 TensorFlow入门教程集合 tensorboard教程:2017 TensorFlow 开发者峰会 TensorBoard轻松实践 ...
- Windows操作系统远程Linux服务器传输文件方法(以EasyDSS云平台、EasyNVR上传部署为例)
本文转自博客:https://blog.csdn.net/black_3717/article/details/79769406 问题背景: 之前给客户部署我们一款EasyDSS云平台(配合EasyN ...
- EasyNVR RTSP转RTMP-HLS流媒体服务器前端构建之:使用BootstrapPagination以分页形式展示数据信息
上一篇介绍通过接口来获取数据,本篇将介绍如何以分页形式展示出接口获取到的数据 获取到的数据往往会很多,为了追去页面的美观和方便用户的检索,需要进行分页的展示: EasyNVR可接如多通道,当我们的通道 ...
- Eclipse如何删除插件
删除Eclipse安装的插件方法: help -> install new softWare -> what is already installed ->选中 要卸载的插件 -&g ...
- Netty Bootstrap(图解)|秒懂
目录 Netty Bootstrap(图解) 源码工程 写在前面 图解几个重要概念 父子 channel EventLoop 线程与线程组 通道与Reactor线程组 Channel 通道的类型 启动 ...
- div+css清除浮动代码
<style type="text/css"> .div1{ background:#000080; border:1px solid red;} .div2{ bac ...
- 我的Java开发学习之旅------>Java经典排序算法之快速排序
一.算法思想 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序.它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod).(1) 分治法的 ...
- indows下PHP通过ffmpeg给上传的视频截图详解
windows下PHP通过ffmpeg给上传的视频截图详解,php_ffmpeg.dll安装下载,找了很久php_ffmpeg.dll的下载地址和应用,发现有用的资源很少,现在问题解决了,贴出来跟大家 ...
- 转载 j2ee j2se j2me 区别,mvc 和ssh联系理解
[转]J2SE J2EE J2ME的区别 以及 MVC与SSH对应关系 2014-3-6阅读322 评论0 J2SE J2EE J2ME的区别多数编程语言都有预选编译好的类库以支持各种特定的功能,在J ...