编辑
2025-09-26
C#
00

目录

摘要
正文
温度计控件的基本要求
代码分析

摘要

在实际应用中,我们可能会遇到需要展示实时温度的情况,比如在工业控制界面或环境监测系统中。本文将详细介绍如何使用C# WinForm开发一个简单的温度计控件,利用.NET框架和Windows图形用户界面(GUI)的相关技术,通过直观的界面展示温度数据。

正文

温度计控件的基本要求

首先,让我们确定一下温度计控件的基本要求:

  1. 可设置的最小值和最大值:用户需要能够设定温度范围。
  2. 显示当前温度值:控件需要展示当前的温度。
  3. 刻度线显示:温度计上需要有刻度线以便用户读取温度。
  4. 水银柱显示:动态显示当前温度的水银柱。
C#
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace gdi104 { public class TemperatureGauge : Control { private int minValue = 0; private int maxValue = 100; private int currentValue = 50; public int MinValue { get { return minValue; } set { minValue = value; Invalidate(); } } public int MaxValue { get { return maxValue; } set { maxValue = value; Invalidate(); } } public int CurrentValue { get { return currentValue; } set { if (value < minValue) currentValue = minValue; else if (value > maxValue) currentValue = maxValue; else currentValue = value; Invalidate(); } } public TemperatureGauge() { SetStyle(ControlStyles.ResizeRedraw, true); SetStyle(ControlStyles.DoubleBuffer, true); SetStyle(ControlStyles.AllPaintingInWmPaint, true); SetStyle(ControlStyles.UserPaint, true); Width = 60; // 控制宽度以控制温度计的高度 Height = 300; // 控制高度以控制温度计的宽度 BackColor = Color.WhiteSmoke; Padding = new Padding(2, 20, 2, 20); } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); Graphics g = e.Graphics; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; // 绘制背景 g.FillRectangle(Brushes.White, Padding.Left, Padding.Top, Width - Padding.Horizontal, Height - Padding.Vertical); // 绘制边框 g.DrawRectangle(Pens.AliceBlue, Padding.Left, Padding.Top, Width - Padding.Horizontal - 1, Height - Padding.Vertical - 1); // 绘制刻度线 for (int i = minValue; i <= maxValue; i += 10) { float yPos = (float)(maxValue - i) / (maxValue - minValue) * (Height - Padding.Vertical) + Padding.Top; g.DrawLine(Pens.Black, Padding.Left + 10, yPos, Padding.Left + 20, yPos); g.DrawString(i.ToString(), Font, Brushes.Black, Padding.Left + 25, yPos - 10); } // 绘制水银柱 float indicatorY = (float)(maxValue - currentValue) / (maxValue - minValue) * (Height - Padding.Vertical) + Padding.Top; float mercuryHeight = (Height - Padding.Vertical) - (indicatorY - Padding.Top); g.FillRectangle(Brushes.Red, Padding.Left + 10, indicatorY, 10, mercuryHeight); } } }

代码分析

上述代码实现了一个 TemperatureGauge 控件,该控件主要包含以下几个部分:

  1. 属性定义
    • MinValue:最低温度值。
    • MaxValue:最高温度值。
    • CurrentValue:当前温度值。
  2. 构造函数
    • 设置了一些控件样式来提升绘制效果,如 DoubleBuffer 以及 ResizeRedraw 等。
    • 设定了控件的默认宽度和高度,并设置背景色和内边距。
  3. 绘制逻辑(在 OnPaint 方法中):
    • 使用 Graphics 类的方法来绘制控件的各个部分。
    • 先绘制背景,然后绘制温度计的边框。
    • 根据 MinValueMaxValue 来绘制刻度线和刻度数字。
    • 最后根据 CurrentValue 绘制红色表示当前温度的水银柱。

这段代码创建了一个温度计控件,可以设置和显示温度值范围。通过重写 OnPaint 方法,绘制出控件的背景、边框、刻度线和水银柱。用户可以通过设置 MinValue, MaxValueCurrentValue 属性来改变温度计的显示。

image.png

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!