C#绘制圆形时钟
本文由作者参考部分案例后加以修改完成:
参考链接如下:
http://blog.csdn.net/xuemoyao/article/details/8001113
http://wenku.baidu.com/view/1221d6522f60ddccda38a0e7
(1) 最终效果

(2)程序实现分析:
选用Paint事件进行实现绘制,然后加一个定时器设定为1000毫秒更新一次。
(3)具体方法
在Form窗体(设置大小为300*300),中添加Time1,属性Enabled改为true,Interval设置为1000
然后在Designer.cs中Form1的属性定义下添加
this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint);
在Form1.cs中Form1类下添加函数
Private void Form_Paint(Object Sender,PaintEventArgs e)
{
Graphics g=e.Graphics; //定义g为该窗体控件的画布
int r=100;
// 绘制数字时钟
Rectangle r1=new Rectangle(50,10,200,20);
//参数分别为左上角矩形坐标,宽度和长度
g.FillRectangle(Brushes.Chocolate,r1);//填充颜色
int ss=DateTime.Now.Second;
int mm=DateTime.Now.Minute;
int hh=DateTime.Now.Hour;
String s=Convert.ToString(ss);
String m=Convert.ToString(mm);
String h=Convert.ToString(hh);
if(ss>=0&&ss<=9)
s=”0”+s;
if(mm>=0&&mm<=9)
m=”0”+m;
if(hh>=0&&hh<=9)
h=”0”+h;
Font f1=new Font(“宋体”,12,FontStyle.Bold);
StringFormat sf1=new StringFormat();
SolidBrush s1=new SolidBrush(Color.White);
g.Drawstring(“当前时间”+h+”:”+m+”:”+s,f1,s1,r1,sf1);
g.DrawString("当前时间 " + h + ":" + m + ":" + s, f1, s1, r1, sf1);
//绘制圆形轮廓
g.FillEllipse(Brushes.White,50,50,200,200)
g.DrawEllipse(New Pen(Color.Red,2),46,46,208,208);
g.DrawEllipse(new Pen(Color.DarkGray, 1), 50,50, 200, 200);
//绘制数字刻度
g.ResetTransform();
g.TranslateTransform(150, 150); //重新定位坐标
Font drawFont = new Font("Arial", 12);
SolidBrush drawBrush = new SolidBrush(Color.Black);
e.Graphics.DrawString("6", drawFont, drawBrush,-7,70);
e.Graphics.DrawString("12", drawFont, drawBrush, -9, -80);
e.Graphics.DrawString("3", drawFont, drawBrush, 70, -7);
e.Graphics.DrawString("9", drawFont, drawBrush, -80, -7);
//绘制刻度
for (int z = 0; z < 60; z++)
{
g.SmoothingMode=System.Drawing.Drawing2D
.SmoothingMode.HighQuality;
//使画出的指针更平滑、高质量
g.ResetTransform;
g.TranslateTransform(150,150); //更改坐标原点
g.RotateYransform(z*5); //旋转,每一秒旋转6度
if(z%5==0)
g=DrawLine(new Pen(Color.Black,3.0f).r-12,0,r-5,0);
//小时刻度
else
g.DrawLine(new Pen(Color.Black,1.5f),r-8,0,r-5,0);
//分钟标准刻度
}
//绘制秒针
g.ResetTransform(); //恢复默认状态
g.TranslateTransform(150,150);
g.RotateTransform(ss*6+270);
//以水平线为x轴,从垂直上方开始旋转,每次旋转6度。
Pen secPen=new Pen(Color.Red,1);
secPen.StartCap=System.Drawing.Drawing2D.LineCap.RoundAnchor;
//画线,从圆点开始
secPen.EndCap=System.Drawing.Drawing2D.LineCap.ArrowAnchor;
//画线,结束于箭头
g.DrawLine(secPen,0,0,65,0);//65表示线的长度
//绘制分针
g.ResetTransform();
g.TranslateTransform(150,150);
g.RotateTransform(mm*6+270);
Pen minPen=new Pen(Color.Blue,2);
minPen.StartCap = System.Drawing.Drawing2D.LineCap.RoundAnchor;
minPen.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;
g.DrawLine(minPen, 0, 0,50 , 0);
//绘制时针
g.ResetTransform();
g.TranslateTransform(150,150);
g.RotateTransform(hh*30+mm*1/2+270);
Pen hourPen = new Pen(Color.Black,3);
hourPen.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;
g.DrawLine(hourPen, 0, 0, 35, 0);
}
time1的响应事件
private void timer1_Tick(object sender, EventArgs e)
{
Invalidate();
}
C#绘制圆形时钟的更多相关文章
- js绘制圆形时钟
纯js制作圆形时钟 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- canvas自适应圆形时钟绘制
前面的话 前面介绍过canvas粒子时钟的绘制,本文将详细介绍canvas自适应圆形时钟绘制 效果演示 最终自适应圆形时钟的效果如下所示 功能分析 下面来分析一下该圆形时钟的功能 [1]静态背景 对于 ...
- canvas绘制简易时钟
时钟绘制的非常简易,但该有的都有了. 效果图如下, <!DOCTYPE html> <html> <head lang="en"> <me ...
- 使用html5 canvas绘制圆形或弧线
注意:本文属于<html5 Canvas绘制图形入门详解>系列文章中的一部分.如果你是html5初学者,仅仅阅读本文,可能无法较深入的理解canvas,甚至无法顺畅地通读本文.请点击上述链 ...
- 应用canvas绘制动态时钟--每秒自动动态更新时间
使用canvas绘制时钟 下文是部分代码,完整代码参照:https://github.com/lemoncool/canvas-clock,可直接下载. 首先看一下效果图:每隔一秒会动态更新时间 一. ...
- canvas快速绘制圆形、三角形、矩形、多边形
想看前面整理的canvas常用API的同学可以点下面: canvas学习之API整理笔记(一) canvas学习之API整理笔记(二) 本系列文章涉及的所有代码都将上传至:项目代码github地址,喜 ...
- android绘制圆形图片的两种方式
看下效果先 下面有完整的示例代码 使用BitmapShader(着色器) 我们在绘制view 的时候 就是小学上美术课 用水彩笔在本子上画画 使用着色器绘制圆形图片最简单的理解方式 就是把bitmap ...
- jQuery ClockPicker 圆形时钟
ClockPicker.js是一款时钟插件,其实还可以改进,里面的分可以改成短横线. 在线实例 实例预览 jQuery ClockPicker 圆形时钟 使用方法 <div class=&qu ...
- Css绘制圆形,环形,椭圆等图形
转载自http://blog.csdn.net/gongstrong123/article/details/50888758 绘制圆形,环形,椭圆 <!DOCTYPE html> < ...
随机推荐
- QLGame 2d Engine 搭建2d游戏原理
大家好,2d引擎基于opengl(es) 3d技术,是因为这样比之前的ddraw有很多好处! 1.坐标采用浮点数,可以进行曲线移动 2.如果在ddraw的对图片进行缩放和旋转的时候,是基于点像素的操作 ...
- 【 SPOJ - GRASSPLA】 Grass Planting (树链剖分+树状数组)
54 种草约翰有 N 个牧场,编号为 1 到 N.它们之间有 N − 1 条道路,每条道路连接两个牧场.通过这些道路,所有牧场都是连通的.刚开始的时候,所有道路都是光秃秃的,没有青草.约翰会在一些道 ...
- CycleScrollView实现轮播图
// // CycleScrollView.h // PagedScrollView // // Created by 李洪强 on 16-1-23. // Copyright (c) 201 ...
- Android用户界面 UI组件--AdapterView及其子类(一) ListView及各种Adapter详解
ListView就是列表组件,一般通过继承ListActivity使用系统提供的ListView. 所有的AdapterView组件都需要有一个对应的Adapter作为适配器来显示列表中元素的布局方式 ...
- 《鸟哥的Linux私房菜》读书笔记四
1.Linux的目录配置以『树状目录』来配置,至於磁碟分割槽(partition)则需要与树状目录相配合! 请问,在预设的情况下,在安装的时候系统会要求你一定要分割出来的两个Partition为何? ...
- insert into select * from 锁表
mysql[192.168.11.187] processid[249] root@localhost in db[zjzc] hold transaction time 197 112069858, ...
- bzoj2186
首先我们看到题目要求的是1~N!内有M!互质的个数 N!>M!,而我们是知道在M!以内与M!互质的数的个数,即phi(M!) 但是M!~N!内与M!互质的数有多少个呢? 对于每个互质的数,如果我 ...
- [C# 网络编程系列]专题六:UDP编程
转自:http://www.cnblogs.com/zhili/archive/2012/09/01/2659167.html 引用: 前一个专题简单介绍了TCP编程的一些知识,UDP与TCP地位相当 ...
- (转载)查看三种MySQL字符集的方法
(转载)http://database.51cto.com/art/201010/229171.htm MySQL字符集多种多样,下面为您列举了其中三种最常见的MySQL字符集查看方法,该方法供您参考 ...
- 畅通工程2 HDOJ--1863
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...