爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 16793|回复: 35

温度、湿度、气压等控件使用-C#

[复制链接]

新浪微博达人勋

发表于 2014-8-6 09:04:55 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
在斑竹的认可下我有信心了,把前一点时间做的一个设计发给大家分享一下,源码看附件,效果图看如下:
说明一下因为这个是参加竞赛的东西为了说明是原创,所以有水印。
05.jpg

CDIOWSTRH.rar

165.17 KB, 下载次数: 65, 下载积分: 金钱 -5

售价: 2 贡献  [记录]

评分

参与人数 4金钱 +50 贡献 +10 收起 理由
wxpc007 + 10 很给力!
婧观气变 + 5 很给力!
风子 + 10 很给力!
mofangbao + 25 + 10 赞一个!

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-8-6 09:22:25 | 显示全部楼层

温度、湿度控件源码[原创]

上一个贴只是一个如何使用温湿度控件的一个程序例子,里面还有水印,那么可能有的朋友想知道那些控件是怎么制作的,建议有基础的可以看看控件的源码,制作控件的过程很简单很多教科书也都有说明,制作时只需要一个 pictureBox 控件即可。以下仅公布源码:
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;
using System.Drawing.Drawing2D;
using System.IO;

namespace AWS_CuitLu
{
    public partial class UseTa : UserControl
    {
         private float ta = 0;//控件填充值
        private float mmin = 0;//最小值控件最低点
        private float mmax = 100;//最大值控件最高点
        private int mfont = 8;//字体大小
        Color mc = Color.Red;//颜色
        private string mname = "Ta(℃)";//控件名字,您可以把它写成温度、湿度、气压、雨量、蒸发任意一个
        public string Mname  //控件名字属性
        {
            get { return (mname); }

            set { mname = value; }
        }
        public int MFont  //控件字体属性
        {
            get { return (mfont); }

            set { mfont = value; }
        }
        public UseTa()
        {
            InitializeComponent();
        }
        public float Min
        {
            get { return (mmin); }

            set { mmin = value; }
        }
        public float Max
        {
            get { return (mmax); }

            set { mmax = value; }
        }
        public float TA
        {
            get { return (ta); }

            set { ta = value; }
        }
         public Color  MC
         {
           get { return (mc); }

            set {mc = value; }
    }
        public void drawTa()
        {
            pictureBox1.Image = mydrawTa(ta);
        }
        public void drawTa(float ita)
        {
            pictureBox1.Image = mydrawTa(ita);
        }


        private void UseTa_Load(object sender, EventArgs e)
        {
            pictureBox1.Height = this.Height;
            pictureBox1.Width = this.Width;
            drawTa();
        }
        private Bitmap mydrawTa(float s)
        {
          //控件的绘制就在下面代码完成,
         //记住控件是可以任意大小的,但是空间高250,宽84效果最好。
        //您也可以按照高250,宽84的比例缩放效果也还可以
            Bitmap bitmap = new Bitmap(this.pictureBox1.Width, this.pictureBox1.Height);
            Graphics gu = Graphics.FromImage(bitmap);
            gu.Clear(Color.White);
            gu.SmoothingMode = SmoothingMode.AntiAlias;
            float ax = (float)(pictureBox1.Width) / (float)84;
            float ay = (float)(pictureBox1.Height) / (float)250;
            float mdelay = (mmax - mmin) / 10;//间隔
            Pen p = new Pen(Color.Gainsboro, 6);
            Pen ufpen = new Pen(mc, 7);
            ufpen.EndCap = LineCap.Round;
            gu.DrawEllipse(ufpen, 31 * ax, 214 * ay, 3, 3);
            PointF p1 = new PointF(28.0f * ax, 221.0f * ay);
            PointF p9 = new PointF(28.0f * ax, 205.0f * ay);
            PointF p2 = new PointF(18.0f * ax, 197.0f * ay);
            PointF p3 = new PointF(18.0f * ax, 221.0f * ay);
            PointF p4 = new PointF(28.0f * ax, 228.0f * ay);
            PointF p5 = new PointF(38.0f * ax, 228.0f * ay);
            PointF p6 = new PointF(48.0f * ax, 221.0f * ay);
            PointF p7 = new PointF(48.0f * ax, 197.0f * ay);
            PointF p10 = new PointF(38.0f * ax, 205.0f * ay);
            PointF p8 = new PointF(38.0f * ax, 221.0f * ay);
            PointF[] points = new PointF[] { p1, p9, p2, p3, p4, p5, p6, p7, p10, p8 };
             Font mfont2 = new Font("Times New Roman", 8);
            gu.FillPolygon(Brushes.Brown, points, FillMode.Winding);
            //ufpen.StartCap = LineCap.RoundAnchor;
            Pen sdpen = new Pen(Color.Black, 6);
            try
            {
                if (s >=mmin && s <= mmax)
                {
                    gu.DrawLine(ufpen, 32.0f * ax, 214.0f * ay, 32.0f * ax, (214.0f - (s-mmin)/mdelay * 20.0f) * ay);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\r\n");
            }

            Pen mpen = new Pen(Color.Black, 1);
            Pen mypen = new Pen(Color.Black, 1);
            Pen graypen = new Pen(Color.Gainsboro, 6);
            Font myfont = new Font("华文新魏", mfont);
            gu.DrawLine(p, (int)(25.0f * ax), 1, (int)(25.0f * ax), (int)(200.0f * ay));
            gu.DrawLine(graypen, (int)(40.0f * ax), 1, (int)(40.0f * ax), (int)(200.0f * ay));

            for (int y = 10; y < 212; y += 2)
            {
                Pen tPen = (y % 10 == 0) ? mypen : mpen;
                if (tPen == mypen)
                {
                    Point pt1 = new Point((int)(40.0f * ax), (int)(y * ay));
                    Point pt2 = new Point((int)(48.0f * ax), (int)(y * ay));
                    gu.DrawLine(mypen, pt1, pt2);
                    Rectangle Rect = new Rectangle((int)(48.0f * ax), (int)((y - 3) * ay), (int)(30.0f * ax), (int)(10.0f * ay));
                    switch (y)
                    {
                        case 10:
                            {
                                gu.DrawString(mmax.ToString("0"), myfont, Brushes.Black, Rect);
                                break;
                            }
                        case 30:
                            {
                                gu.DrawString((mmax-mdelay).ToString("0"), myfont, Brushes.Black, Rect);
                                break;
                            }

                        case 50:
                            {
                                gu.DrawString((mmax - mdelay*2).ToString("0"), myfont, Brushes.Black, Rect);
                                break;
                            }
                        case 70:
                            {
                                gu.DrawString((mmax - mdelay*3).ToString("0"), myfont, Brushes.Black, Rect);
                                break;
                            }
                        case 90:
                            {
                                gu.DrawString((mmax - mdelay*4).ToString("0"), myfont, Brushes.Black, Rect);
                                break;
                            }
                        case 110:
                            {
                                gu.DrawString((mmax - mdelay*5).ToString("0"), myfont, Brushes.Black, Rect);
                                break;
                            }

                        case 130:
                            {
                                gu.DrawString((mmax - mdelay*6).ToString("0"), myfont, Brushes.Black, Rect);
                                break;
                            }
                        case 150:
                            {
                                gu.DrawString((mmax - mdelay*7).ToString("0"), myfont, Brushes.Black, Rect);
                                break;
                            }
                        case 170:
                            {
                                gu.DrawString((mmax - mdelay*8).ToString("0"), myfont, Brushes.Black, Rect);
                                break;
                            }
                        case 190:
                            {
                                gu.DrawString((mmax - mdelay*9).ToString("0"), myfont, Brushes.Black, Rect);
                                break;
                            }
                        case 210:
                            {
                                gu.DrawString(mmin.ToString("0"), myfont, Brushes.Black, Rect);
                                break;
                            }
                    }
                }
                else
                {
                    Point pta = new Point((int)(40.0f * ax), (int)(y * ay));
                    Point ptb = new Point((int)(43.0f * ax), (int)(y * ay));
                    gu.DrawLine(tPen, pta, ptb);
                }
            }
            Brush brush = new SolidBrush(Color.FromArgb(64, Color.Red));
            gu.DrawString(mname, mfont2, Brushes.Black, 0, 0);//这句话是将控件名绘制在控件上的,您不想要就要注释了
            gu.DrawString("CUIT-CDIO", mfont2, brush, 0f, 15f);//这句话是给控件添加水印的,您可以修改或注释。
            gu.Dispose();
            return (bitmap);
        }


    }
}


评分

参与人数 1金钱 +12 贡献 +3 收起 理由
mofangbao + 12 + 3

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-8-6 09:26:26 | 显示全部楼层
不错,看着真是高大上
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-8-6 09:27:26 | 显示全部楼层
这个代码为了调节好效果,我花了很久,有需要的可以使用,但不要作为商业用途,更不要晒到其他地方。谢谢。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-8-6 09:28:55 | 显示全部楼层
如果您不知道怎么用参考我的另外一个帖子

温度、湿度、气压等控件使用-C#
http://bbs.06climate.com/forum.p ... 9&fromuid=37658
(出处: 气象家园)
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-8-6 09:32:44 | 显示全部楼层
这个是采用ZIGbee无线通讯传过来显示的,为了让外国同学能看懂采用英文界面。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2014-8-6 09:48:17 | 显示全部楼层
谢谢楼主无私分享!我帮你把两个帖子合并了,内容相似的发在一个帖子里面就可以啦,这样别人查找也比较容易~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-8-6 09:55:04 | 显示全部楼层
mofangbao 发表于 2014-8-6 09:48
谢谢楼主无私分享!我帮你把两个帖子合并了,内容相似的发在一个帖子里面就可以啦,这样别人查找也比较容易 ...

感谢版主,我不太会用
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-8-7 01:40:14 | 显示全部楼层
看起来很厉害的样子,以后要用的话再来学习!谢谢楼主!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-8-11 19:36:10 | 显示全部楼层
感觉好高级的样子,我也要努力学学~
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表