c# winform时钟的实现代码
发布时间:2023-04-05 07:40:53
标签:winform,时钟
代码如下:
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));
}
}
}


猜你喜欢
- android原生的下拉框Spinner基本上可以满足Android开发对于下拉选项的设计需求,但现在越来越流行的下拉框不满足于Androi
- 1、@Component 是用在类上的@Component public class Student { private String na
- CopyOnWriteArrayList介绍它相当于线程安全的ArrayList。和ArrayList一样,它是个可变数组;但是和Array
- 背景Java是一种流行的编程语言,验证码是一种常用的网络安全技术。Java发展至今,网上也出现了各种各样的验证码,本人初学Java,下面是我
- 本人在spring中使用redis作为缓存时,遇到两个坑,现在记录如下,算是作为自己的备忘吧,文笔不好,望大家见谅;一、配置文件<!-
- 本文介绍C#编程时,给定一个字符串,如何判断它是不是一个日期。本文将介绍两种方法,一个是判断字符串是否是时间,如果是就转换为一个时间变量,第
- java中javaBean与Bean的深入理解JavaBean 是Java中的一种特殊的类,可以将多个对象封装到一个对象(bean)中。特点
- 前言前几天恰好面试一个应届生,问了一个很简单的问题:你了解过Mybatis中有几种传参方式吗?没想到其他问题回答的很好,唯独这个问题一知半解
- 常量池中各数据项类型详解(续)(8) CONSTANT_Class_info常量池中的一个CONSTANT_Class_info,
- 前言我们了解数组这个概念之前,我们先思考下面几个问题。如果我们需要两个数据,那么直接创建两个变量即可int a;int b;如果需要五个数据
- 1. 前言本节将对 Spring Security 中的密码编码进行一些探讨。2. 不推荐使用md5首先md5 不是加密算法,是哈希摘要。以
- 目录概述语法索引器(Indexer)的用途重载索引器(Indexer)概述索引器(Indexer) 允许一个对象可以像数组一样使用下标的方式
- 面试题1:说说你对消息队列的理解,消息队列为了解决什么问题?我们公司业务系统一开始体量较小,很多组件都是单机版就足够,后来随着用户量逐渐扩大
- name hobbyTom &nb
- 前言Spring官方最近宣布,将在Spring Framework 5.0版本中正式支持Kotlin语言。这意味着Spring Boot 2
- 本文实例讲述了Java设计模式之抽象工厂模式。分享给大家供大家参考,具体如下:具体工厂类:生产创建某一类具体产品对象。抽象产品类可以使用接口
- 用法1 为原始类型扩展方法先说一下,this 后面跟的类型,就是要拓展方法的类型。注意要写在静态类中的静态方法,不然有些情况下访问/// &
- 本文实例为大家分享了Android实现点击获取验证码60秒后重新获取的具体代码,供大家参考,具体内容如下上代码/** * Created b
- 本文实例讲述了C#使用xsd文件验证XML格式是否正确的实现方法。分享给大家供大家参考,具体如下://创建xmlDocumentXmlDoc
- 不得已重新配置,这里记下详细步骤,分享给大家。一、安装jdk,具体步骤如下:1、将jdk-7u4-linux-i586.tar拷贝到linu