c# winform时钟的实现代码

 更新时间:2020年6月25日 11:38  点击:1349

代码如下:

复制代码 代码如下:

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));

 
         }

     }
}

[!--infotagslink--]

相关文章

  • 华为手机怎么开启双时钟? 华为添加双时钟的技巧

    华为手机怎么开启双时钟?华为手机是可以设置双时钟的,如果来回在两个有时差的地方工作,是可以设置双时钟显示,下面我们就来看看华为添加双时钟的技巧,需要的朋友可以参考下...2020-12-08
  • 深入分析C#中WinForm控件之Dock顺序调整的详解

    本篇文章是对C#中WinForm控件之Dock顺序调整进行了详细的分析介绍,需要的朋友参考下...2020-06-25
  • C# Winform中实现主窗口打开登录窗口关闭的方法

    这篇文章主要介绍了C# Winform中实现主窗口打开登录窗口关闭的方法,这在需要用户名密码的软件项目中是必用的一个技巧,要的朋友可以参考下...2020-06-25
  • C# winform打开Excel文档的方法总结(必看篇)

    下面小编就为大家带来一篇C# winform打开Excel文档的方法总结(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • C# WinForm快捷键设置技巧

    这篇文章主要给大家介绍C# winform快捷键设置技巧,涉及到C winform快捷键相关知识,对C winform知识感兴趣的朋友可以参考下本篇文章...2020-06-25
  • c#中Winform实现多线程异步更新UI(进度及状态信息)

    本篇文章主要介绍了c#中Winform实现多线程异步更新UI(进度及状态信息) ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • C#中winform使用相对路径读取文件的方法

    这篇文章主要介绍了C#中winform使用相对路径读取文件的方法,实例分析了C#使用相对路径读取文件的技巧与实际应用,需要的朋友可以参考下...2020-06-25
  • c# winform异步不卡界面的实现方法

    这篇文章主要给大家介绍了关于c# winform异步不卡界面的实现方法,文中通过示例代码介绍的非常详细,对大家学习或者使用c#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-06-25
  • C# WinForm程序处理后台繁忙导致前台控件假死现象解决方法

    这篇文章主要介绍了C# WinForm程序处理后台繁忙导致前台控件假死现象解决方法,本文通过Application.DoEvents()解决这个问题,并讲解了Application.DoEvents()的作用,需要的朋友可以参考下...2020-06-25
  • 微信小程序入门之绘制时钟

    这篇文章主要为大家详细介绍了微信小程序入门之绘制时钟,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-10-23
  • winform中的ListBox和ComboBox绑定数据用法实例

    这篇文章主要介绍了winform中的ListBox和ComboBox绑定数据用法,实例分析了将集合数据绑定到ListBox和ComboBox控件的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • C#在Winform开发中使用Grid++报表

    这篇文章主要介绍了C#在Winform开发中使用Grid++报表,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • C# WinForm程序设计简单计算器

    这篇文章主要为大家详细介绍了C# WinForm程序设计简单计算器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
  • C# WinForm控件对透明图片重叠时出现图片不透明的简单解决方法

    这篇文章主要介绍了C# WinForm控件对透明图片重叠时出现图片不透明的简单解决方法,结合实例形式分析了WinForm图片重叠后造成图片不透明的原因与相应的解决方法,需要的朋友可以参考下...2020-06-25
  • C#实现Winform中打开网页页面的方法

    这篇文章主要介绍了C#实现Winform中打开网页页面的方法,涉及WinForm中WebBrowser的相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 使用js和canvas实现时钟效果

    这篇文章主要为大家详细介绍了使用js和canvas实现时钟效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-09-08
  • winform 实现控制输入法

    在工作中遇到这样一个问题,在系统使用过程中,输入法会变灰导致无法使用输入法输入文字,就好像输入法被禁用了没有启用似的。对此,在这里做个备录...2020-06-25
  • C#实现winform中RichTextBox在指定光标位置插入图片的方法

    这篇文章主要介绍了C#实现winform中RichTextBox在指定光标位置插入图片的方法,涉及RichTextBox控件及剪切板的相关操作技巧,非常简单实用,需要的朋友可以参考下...2020-06-25
  • JavaScript实现动态数字时钟

    这篇文章主要为大家详细介绍了JavaScript实现动态数字时钟,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-05-28
  • C# Winform 调用系统接口操作 INI 配置文件的代码

    封装了一小段代码, 调用系统接口, 操作配置文件. 一般用于 .ini 文件, 或者其它键值对格式的配置文件...2020-06-25