c# winform时钟的实现代码

所属分类: 软件编程 / C#教程 阅读数: 111
收藏 0 赞 0 分享

代码如下:

复制代码 代码如下:

using System;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.Data;
 using System.Drawing;

 using System.Text;
 using System.Windows.Forms;

 namespace Simpclock
 {
     public partial class Form1 : Form
     {
         DateTime date = DateTime.Now;

         public Form1()
         {
             InitializeComponent();

         }

         private void Form1_Load(object sender, EventArgs e)
         {
             date = DateTime.Now;

         }

         private void OnPaint(object sender, PaintEventArgs e)
         {
             Font font = new Font("Times New Roman", 20);
             Graphics g = CreateGraphics();
             g.DrawString(date.ToString(), font, Brushes.Firebrick, 10,330 );
             g.DrawString(date.DayOfWeek.ToString(), font, Brushes.Red, 250, 330);
             DrawDial(g);
             DrawSecondPointer(g);
             DrawMinutePointer(g);
             DrawHourPointer(g);

         }
         //刷新时间
         private void OnTime(object sender, EventArgs e)
         {
             date = DateTime.Now;
             Invalidate();
         }
         //画钟表
         //表盘部分
         Point GetPosition(int s, Point center, double radius)//定位
         {
             Point p = new Point();
             double x = center.X + radius * Math.Sin(Math.PI / 30 * s);
             double y = center.Y - radius * Math.Cos(Math.PI / 30 * s);
             p.X = (int)x;
             p.Y = (int)y;
             return p;
         }

         void DrawDial(Graphics g)//外圆及刻度
         {
             int n;
             Rectangle rect = new Rectangle(40, 10, 300, 300);
             //g.FillEllipse(Brushes.White, 40, 10, 300, 300);
             g.DrawEllipse(new Pen(Color.Black, 3), rect);
             Point p1, p2;
             Point center = new Point(190, 160);
             for (n = 0; n < 60; n++)
             {
                 p1 = GetPosition(n, center, 150);
                 if (n % 5 == 0)
                 {
                     p2 = GetPosition(n, center, 130);
                     g.DrawLine(new Pen(Color.Black, 2), p1, p2);
                 }
                 else
                 {
                     p2 = GetPosition(n, center, 140);
                     g.DrawLine(Pens.Red, p1, p2);
                 }
             }
             Font font = new Font("Times New Roman", 20);
             n = 0;
             p1 = GetPosition(n, center, 130);
             g.DrawString("XII", font, Brushes.Black, p1.X - 25, p1.Y);
             n += 15;
             p1 = GetPosition(n, center, 130);
             g.DrawString("III", font, Brushes.Black, p1.X - 35, p1.Y - 15);
             n += 15;
             p1 = GetPosition(n, center, 130);
             g.DrawString("VI", font, Brushes.Black, p1.X - 20, p1.Y - 30);
             n += 15;
             p1 = GetPosition(n, center, 130);
             g.DrawString("IX", font, Brushes.Black, p1.X, p1.Y - 15);
         }
         //秒针部分
         void DrawSecondPointer(Graphics g)
         {
             Point center = new Point(190, 160);
             Point p;
             p = GetPosition(date.Second, center, 130);
             g.DrawLine(Pens.Red, center, p);
             g.FillEllipse(Brushes.Red, new Rectangle(p.X - 2, p.Y - 2, 4, 4));

         }
         //分针部分
         void DrawMinutePointer(Graphics g)
         {
             Point center = new Point(190, 160);
             Point p;
             p = GetPosition(date.Minute, center, 120);
             g.DrawLine(Pens.Blue, center, p);
             //g.FillEllipse(Brushes.Blue, new Rectangle(p.X - 4, p.Y - 4, 8, 8));
         }
         //时针部分
         Point GetHourPosition(Point center, double radius)
         {
             Point p = new Point();
             int h = date.Hour;
             int m = date.Minute;
             double t = Math.PI / 6 * h + Math.PI / 360 * m;
             double x = center.X + radius * Math.Sin(t);
             double y = center.Y - radius * Math.Cos(t);
             p.X = (int)x;
             p.Y = (int)y;
             return p;
         }
         void DrawHourPointer(Graphics g)
         {
             Point center = new Point(190, 160);
             Point p = GetHourPosition(center, 100);
             g.DrawLine(new Pen(Brushes.Black, 2), center, p);
             //去指针圆尖
             // g.FillEllipse(Brushes.Black,
             //              new Rectangle(p.X - 6, p.Y - 6, 12, 12));
             g.FillEllipse(Brushes.YellowGreen,
             new Rectangle(center.X - 6, center.Y - 6, 12, 12));

 
         }

     }
}

更多精彩内容其他人还在看

c#开发word批量转pdf源码分享

已经安装有Office环境,借助一些简单的代码即可实现批量Word转PDF,看下面的实例源码吧
收藏 0 赞 0 分享

c# xml API操作的小例子

这篇文章主要介绍了c# xml API操作的小例子,有需要的朋友可以参考一下
收藏 0 赞 0 分享

c#唯一值渲染实例代码

这篇文章主要介绍了c#唯一值渲染实例代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

淘宝IP地址库采集器c#代码

这篇文章主要介绍了淘宝IP地址库采集器c#代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

C#在后台运行操作(BackgroundWorker用法)示例分享

BackgroundWorker类允许在单独的专用线程上运行操作。如果需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用BackgroundWorker类方便地解决问题,下面看示例
收藏 0 赞 0 分享

c#文本加密程序代码示例

这是一个加密软件,但只限于文本加密,加了窗口控件的滑动效果,详细看下面的代码
收藏 0 赞 0 分享

c#生成站点地图(SiteMapPath)文件示例程序

这篇文章主要介绍了c#生成站点地图(SiteMapPath)文件的示例,大家参考使用
收藏 0 赞 0 分享

C# 键盘Enter键取代Tab键实现代码

这篇文章主要介绍了C# 键盘Enter键取代Tab键实现代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

C# WinForm导出Excel方法介绍

在.NET应用中,导出Excel是很常见的需求,导出Excel报表大致有以下三种方式:Office PIA,文件流和NPOI开源库,本文只介绍前两种方式
收藏 0 赞 0 分享

C#串口通信程序实例详解

在.NET平台下创建C#串口通信程序,.NET 2.0提供了串口通信的功能,其命名空间是System.IO.Ports,创建C#串口通信程序的具体实现是如何的呢?让我们开始吧
收藏 0 赞 0 分享
查看更多