C#实现钟表程序设计
作者:步北宸 发布时间:2023-01-01 06:38:42
标签:C#,钟表
本文实例为大家分享了C#实现钟表程序设计的具体代码,供大家参考,具体内容如下
工作空间:
代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
namespace 钟表
{
public partial class frmMain : Form
{
bool flsMouseDown = false;
Point fDownPosition;
public frmMain()
{
InitializeComponent();
}
private void ctsmiExit_Click(object sender, EventArgs e)
{
this.Close();
}
private void frmMain_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
flsMouseDown = true;
fDownPosition = e.Location;
//Debug.WriteLine(e.Location);
}
}
private void frmMain_MouseMove(object sender, MouseEventArgs e)
{
if (flsMouseDown)
{
this.Left = this.Location.X + (e.X - fDownPosition.X);
this.Top = this.Location.Y + (e.Y - fDownPosition.Y);
}
}
private void frmMain_Mouseup(object sender, MouseEventArgs e)
{
flsMouseDown = false;
}
private void tmrMain_Tick(object sender, EventArgs e)
{
this.Refresh();//调用窗体的Paint事件,根据调制的时间来刷新paint时间
}
private void fDrawDot(Graphics aGraphics, double aValue, int aRadius)//画出表盘刻度
{
double lAngle = ((360 - aValue * 6) + 90) * Math.PI / 180;//根据角度绘画
Point lPoint = new Point((int)(200 + 180 * Math.Cos(lAngle)),//刻度所在的为值
(int)(200 - 180 * Math.Sin(lAngle)));
aGraphics.FillEllipse(Brushes.Black, new Rectangle(lPoint.X - aRadius,//FillEllipse为内部填充颜色方法,Rectangle为绘画圆,前俩为圆心坐标,后俩为宽和高
lPoint.Y - aRadius, 2 * aRadius, 2 * aRadius));
}
private void fDrawLine(Graphics aGraphics, double aValue, double aLength, Pen aPen)//画出时,分,秒的线
{//aValue为角度值,小时12个刻度每个占30°,分和秒60个刻度每个站6°avalue按照的是一个圆分成60个换成角度乘于6
//aLength是指针的长度
double lAngle = ((360 - aValue * 6) + 90) * Math.PI / 180;//角度转化为数值
Point lPoint = new Point((int)(200 + aLength * Math.Cos(lAngle)),//指针线的终点,坐标x,y通过直角三角求得
(int)(200 - aLength * Math.Sin(lAngle)));
aGraphics.DrawLine(aPen, new Point(200, 200), lPoint);//绘制俩点连成一条直线,起点相同都为(200,200)
}
private void frmMain_Paint(object sender, PaintEventArgs e)
{
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;//使指针转动显得平滑
e.Graphics.DrawImage(this.BackgroundImage, 0, 0, 400, 400);//规定表盘的大小和位置
for (int i = 0; i < 60; i++)
if (i % 5 == 0) fDrawDot(e.Graphics, i, 6);//绘制钟表刻度,大点和小点
else fDrawDot(e.Graphics, i, 2);
DateTime dt = DateTime.Now;//获取时间
Pen pSecond = new Pen(Color.Black, 2);
Pen pMinute = new Pen(Color.Red, 2);
Pen pHour = new Pen(Color.Blue, 4);
fDrawLine(e.Graphics, ((dt.Hour % 12) + dt.Minute / 60.0) * 5, 100, pHour);//绘画时,分,秒指针
fDrawLine(e.Graphics, dt.Minute+dt.Second/60.0,160, pMinute);
fDrawLine(e.Graphics, dt.Second+dt.Millisecond/1000.0, 170, pSecond);
}
Form1.Designer.cs
需添加:(以下代码)
this.DoubleBuffered = true;
this.Deactivate += new System.EventHandler(this.ctsmiExit_Click);
this.Paint += new System.Windows.Forms.PaintEventHandler(this.frmMain_Paint);
this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.frmMain_MouseDown);
this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.frmMain_MouseMove);
this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.frmMain_Mouseup);
来源:https://blog.csdn.net/qq_38534627/article/details/80626329


猜你喜欢
- java读取文件里面部分汉字内容乱码读取一个txt文件,到代码中打印出来,发票有部分汉字的内容是乱码的。我开始的方式是这样的, 如下,这是完
- 1.需求背景需要实现一个动态加载但不显示出来的视图,且该视图上有个动态生成的二维码,最后用其去生成一张快照(也就是图片)。(常见这种情况是来
- 本文实例为大家分享了Android实现界面跳转的具体代码,供大家参考,具体内容如下布局<?xml version="1.0&
- IntelliJ IDEA 2022.2为远程开发功能带来了多项质量改进,使其更美观、更稳定。从 v2022.2 开始,IntelliJ I
- 一、读线圈状态/// <summary> /// 读线圈状态测试 &nbs
- Java中为什么需要Callable在java中有两种创建线程的方法:一种是继承Thread类,重写run方法:public class T
- 本文实例为大家分享了Android实现歌词滚动效果的具体代码,供大家参考,具体内容如下自定义TextViewpublic class Ver
- C#判断数据类型的简单示例代码:int i = 5; Console
- 作为一个合格的开发人员,对项目进行管理自然必不可少。今天就给各位看客介绍一下如何用git将自己的AS项目上传到码云。
- 一、定义责任链模式(Chain of Responsibility Pattern):避免将一个请求的发送者与接受者耦合在一起,让多个对象都
- 概述:堆排序是利用构建“堆”的方法确定具有最大值的数据元素,并把该元素与最后位置上的元素交换。可将任意一个由n个数据元素构成的序列按照(a1
- 使用JDBC时,我们都会很自然得使用下列语句:Class.forName("com.mysql.jdbc.Driver"
- 上一篇博文说到了Shader的五个子类 - BitmapShader - LinearGradient - RadialGradient -
- 本文实例讲述了C#数据绑定(DataBinding)简单实现方法。分享给大家供大家参考。具体实现方法如下:using System;usin
- 一、泛型集合List<T>排序经sort方法之后,采用了升序的方式进行排列的。 List<int> list = n
- 什么是Handler Handler是Android消息机制的上层接口,它为我们封装了许多底层的细节,让
- 使用try-with-resource机制关闭连接JAVA的一大特性就是JVM会对内部资源实现自动回收即自动GC,给开发者带来了极大的便利。
- 项目介绍:Android上最让人头疼的莫过于从网络获取图片、显示、回收,任何一个环节有问题都可能直接OOM,这个项目或许能帮到你。Unive
- 什么是动态线程池?在线程池日常实践中我们常常会遇到以下问题:代码中创建了一个线程池却不知道核心参数设置多少比较合适。参数设置好后,上线发现需
- 一、编码规则Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码。它将需要编码的数据拆分成字节数组。以3个字节为一组