[C#仪表盘控件]InstrumentPanel显示指针仪表数据

本文分享了一种C#环境下创建指针仪表盘控件的方法,包括避免窗体闪烁、自定义颜色和单位、设置显示值等功能。通过绘制到位图再转至控件,确保完整显示,并在值变化时触发重绘,实现指针位置的动态更新。
摘要由CSDN通过智能技术生成

工作中需要用到指针仪表盘显示数据,发觉网络上虽然分享的不少,但是源码不多.

这里分享和分析一个仪表盘控件的绘制;

效果图:


绘制内容上稍微单调,具体需要什么再添加吧.

-----------------------------------------------------------------------

首先贴代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class InstrumentPanel : UserControl
    {
        public InstrumentPanel()
        {
            InitializeComponent();
            SetStyle(ControlStyles.OptimizedDoubleBuffer |
                ControlStyles.ResizeRedraw |
                ControlStyles.AllPaintingInWmPaint, true);
            UpdateStyles();
        }
        public Color _backColor { get; set; } = Color.Green;
        public Color _frameColor { get; set; } = Color.Blue;
        public Color _pinColor { get; set; } = Color.Red;
        public Color _valueColor { get; set; } = Color.Black;
        public Color _fillColor { get; set; } = Color.Gray;
        public string UintString { get; set; } = "mA";

        private double _minValue = 0;
        public double MinValue
        {
            get { return _minValue; }
            set
            {
                _minValue = value;
                if (Value <= _minValue)
                {
                    Value = _minValue;
                }
                //绘制
                this.Invalidate();
            }
        }

        private double _maxValue = 10000;
        public double MaxValue
        {
            get { return _maxValue; }
            set
            {
                _maxValue = value;
                if (Value > _maxValue)
                {
                    Value = _maxValue;
                }
                //绘制
                this.Invalidate();
            }
        }

        private double _Value = 0;
        public double Value
        {
            get { return _Value; }
            set
            {
                double oldvalue = _Value;
                if (value > _maxValue)
                {
                    _Value = _maxValue;
                }
                else if (value < _minValue)
                {
                    _Value = _minValue;
                }
                else
                {
                    _Value = value;
                }
                OnValueChanged?.BeginInvoke(this, oldvalue, _Value, null, null);
                //绘制
                this.Invalidate();
            }
        }

        public delegate void OnValueChangedEventHandler(object sender, double value, double newvalue);
        public event OnValueChangedEventHandler OnValueChanged;

        /// <summary>
        /// 画外框
        /// </summary>
        private void drawFrame(Graphics gp,Point cer,in
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值