• C#实现时钟控件


    十年前在东北学绘图无聊做完雪花屏保之后,又做了个时钟控件,然后用这个控件做了个时钟屏保。学会了绘图之后就可以自己做用户控件了。C#winform的用户控件只要继承UserControl类即可。

    源码地址

    时钟屏保源码
    在这里插入图片描述
    在这里插入图片描述

    先拖一个用户控件UserControl,然后自己实现绘图和属性就可以自定义控件。
    在这里插入图片描述

    就是在定时器逻辑里按属性绘制时钟表盘

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Drawing;
    using System.Drawing.Drawing2D;
    using System.Text;
    using System.Windows.Forms;
    
    namespace UserClock
    {
        public class UserClock:UserControl
        {
            private DateTime time;
            private Timer timer1;
            private System.ComponentModel.IContainer components;
            public UserClock()
            {
                InitializeComponent();
            }
    
            private void InitializeComponent()
            {
                this.components = new System.ComponentModel.Container();
                this.timer1 = new System.Windows.Forms.Timer(this.components);
                this.SuspendLayout();
                // 
                // timer1
                // 
                this.timer1.Enabled = true;
                this.timer1.Interval = 1000;
                this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
                // 
                // UserClock
                // 
                this.Name = "UserClock";
                this.ResumeLayout(false);
    
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                this.time = DateTime.Now;
                this.Refresh();
            }
    
            protected override void OnPaint(PaintEventArgs e)
            {
                Graphics pDC = e.Graphics;
                Pen pen = new Pen(this.ForeColor);
                SolidBrush brush = new SolidBrush(this.ForeColor);
                InitCoordinates(pDC);
                DrawDots(pDC, brush);
                DrawHourHand(pDC, pen);
                DrawMineteHand(pDC, pen);
                DrawSecondHand(pDC, pen);
                
            }
    
            protected   void InitCoordinates(Graphics pDC)
            {
                if (this.Width == 0 || this.Height == 0)
                {
                    return;
                }
                pDC.TranslateTransform(this.Width/2,this.Height/2);//平移坐标原点
                pDC.ScaleTransform(this.Height / 250F, this.Width / 250F);//调整比例大小
            }
            protected   void DrawDots(Graphics pDC, Brush brush)
            {
                int size;
                for (int i = 0; i <= 59; i++)
                {
                    if (i % 5 == 0)
                    {
                        size = 15;
                    }
                    else
                    {
                        size = 5;
                    }
                    pDC.FillEllipse(brush,-size /2,-100-size /2,size ,size );
                    pDC.RotateTransform(6);
                }
            }
    
            protected  void DrawHourHand(Graphics pDC,Pen pen)
            {
                GraphicsState state = pDC.Save();
                pDC.RotateTransform(360.0F * time.Hour / 12 + 30F * time.Minute / 60);
                pDC.DrawLine(pen, 0, 0, 0, -50);
                pDC.Restore(state);
            }
    
    
            protected  void DrawMineteHand(Graphics pDC, Pen pen)
            {
                GraphicsState state = pDC.Save();
                pDC.RotateTransform(360.0F * time.Minute / 60 + 6.0F * time.Second / 60);
                pDC.DrawLine(pen, 0, 0, 0, -70);
                pDC.Restore(state);
            }
    
            protected  void DrawSecondHand(Graphics pDC, Pen pen)
            {
                GraphicsState state = pDC.Save();
                pDC.RotateTransform(360.0F * time.Second  / 60);
                pDC.DrawLine(pen, 0, 0, 0, -100);
                pDC.Restore(state);
            }
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113

    这样简单的代码就可以实现炫酷的小东西,增加编码自信

  • 相关阅读:
    基于51单片机的PWM控制马达电机调速正反转
    使用Ingress-Nginx来暴露ArgoCD Web-UI
    RT-DETR算法优化改进:Inner-IoU基于辅助边框的IoU损失,高效结合 GIoU, DIoU, CIoU,SIoU 等 | 2023.11
    机器学习:在线学习和离线学习区别
    数据分析实战应用案例精讲-【应用篇】词云分析(附实战案例)
    郝培强专访:创业失败、抑郁症和自媒体爆款
    使用DNS查询Web服务器IP地址
    PTA 7-194 循环结构 —— 中国古代著名算题。趣味题目:物不知其数。
    学习笔记23--多传感器信息融合基础理论(上)
    一种方便快捷的服务注册方案
  • 原文地址:https://blog.csdn.net/zhanglianzhu_91/article/details/126444247