C#制作实用天气闹钟

标签: C# 天气 闹钟 WinForm Web Service
27人阅读 评论(0) 收藏 举报
分类:

只要花上一个小时,就可以用C#语言给心爱的TA定制一个WinForm天气闹钟,加上自己录制的闹铃,美哉美哉!天气数据来源于Web Service 接口(http://ws.webxml.com.cn/WebServices/WeatherWS.asmx)。

 

最终效果


 

操作步骤

1. 文件 --> 新建 --> 项目 -->Visual C# --> Windows 窗体应用程序

 

2. 在项目中的引用上点击鼠标右键,选择添加服务引用 --> 高级--> 添加 Web 引用

 

3. 在URL中填写天气Web Service:http://ws.webxml.com.cn/WebServices/WeatherWS.asmx,并点击右边的“前往”小图标,自动生成 Web 引用名,点击【添加引用】即可

 

4. 拖拽控件并编写逻辑代码

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;

namespace WeatherAlarmClock
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        cn.com.webxml.ws.WeatherWS w = null;

        private void button1_Click(object sender, EventArgs e)
        {
            label_weather.Text = "";
            try
            {
                string[] weather = w.getWeather(comboBox_city.Text.Trim(), null);
                if (weather[1] == "")
                {
                    label_weather.Text = "查询次数过多,请24小时后再试!";
                }
                else
                {
                    for (int i = 7; i < 9; i++)
                    {
                        label_weather.Text += weather[i] + " ";
                    }
                    pictureBox_weather.Image = Image.FromFile(@"..\..\weather\b_" + weather[10]);

                    weather[4] = weather[4].Replace("气温", "");
                    weather[4] = weather[4].Replace("风向/风力", "");
                    weather[4] = weather[4].Replace(";", " ");
                    int index = weather[4].IndexOf(":");
                    weather[4] = weather[4].Replace(":", "");
                    weather[4] = "实时" + weather[4].Substring(index);
                    label_weather.Text += "\n" + weather[4];
                    weather[5] = weather[5].Replace("强度", "");
                    weather[5] = weather[5].Replace("。", " ");
                    label_weather.Text += "\n" + weather[5];
                }
            }
            catch
            {
                Console.WriteLine("无法获取WebService!");
            }

        }
        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                w = new cn.com.webxml.ws.WeatherWS();
                label_weather.Text = "";
                label_dis.Text = "";

                string[] province = w.getRegionProvince();
                for (int i = 0; i < province.Length; i++)
                {
                    // 去除逗号后的省份代码,如果将省份名称和代码一起上传,城市查询结果为空
                    int index = province[i].LastIndexOf(",");
                    province[i] = province[i].Substring(0, index);
                    comboBox_province.Items.Add(province[i]);
                }
                comboBox_province.SelectedIndex = 0;
            }
            catch
            {
                Console.WriteLine("无法获取WebService!");
            }

            label_time.Text = DateTime.Now.ToLocalTime().ToString("HH:mm:ss");
            label_alarmClock.Text = "";

            numericUpDown_hour.Text = DateTime.Now.ToLocalTime().Hour.ToString();
            numericUpDown_minute.Text = DateTime.Now.ToLocalTime().Minute.ToString();
        }

        private void comboBox_province_SelectedIndexChanged(object sender, EventArgs e)
        {
            comboBox_city.Items.Clear();
            try
            {
                string[] city = w.getSupportCityString(comboBox_province.Text.Trim());
                for (int i = 0; i < city.Length; i++)
                {
                    // 去除逗号后的城市代码,如果将城市名称和代码一起上传,WebService 返回查询结果为空
                    int index = city[i].LastIndexOf(",");
                    city[i] = city[i].Substring(0, index);
                    comboBox_city.Items.Add(city[i]);
                }
                comboBox_city.SelectedIndex = 0;
            }
            catch
            {
                Console.WriteLine("无法获取WebService!");
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            label_time.Text = DateTime.Now.ToLocalTime().ToString("HH:mm:ss");
            System.Media.SoundPlayer sp = new System.Media.SoundPlayer();

            if (flag)
            {
                int disMin = Convert.ToInt32(hour) * 60 + Convert.ToInt32(minute) - (DateTime.Now.ToLocalTime().Hour * 60 + DateTime.Now.ToLocalTime().Minute);
                disMin--;
                disMin = disMin < 0 ? disMin + 24 * 60 : disMin;
                label_dis.Text = "离闹钟还有 " + (disMin / 60 < 10 ? "0" + (disMin / 60).ToString() : (disMin / 60).ToString())
                    + ":" + (disMin % 60 < 10 ? "0" + (disMin % 60).ToString() : (disMin % 60).ToString());
            }

            if (DateTime.Now.ToLocalTime().Hour == Convert.ToInt32(hour) && DateTime.Now.ToLocalTime().Minute == Convert.ToInt32(minute) && DateTime.Now.ToLocalTime().Second == 0)
            {
                flag = false;
                sp.SoundLocation = @"..\..\alarm\WonderfulAbilitySong.wav";
                sp.PlayLooping();
                if (MessageBox.Show("时间到!", "警告", MessageBoxButtons.OK) == DialogResult.OK)
                {
                    sp.Stop();
                }
                label_alarmClock.Text = "";
                label_dis.Text = "";
            }
        }

        private void numericUpDown_hour_ValueChanged(object sender, EventArgs e)
        {
            if (numericUpDown_hour.Value == -1)
            {
                numericUpDown_hour.Value = 23;
            }
            else if (numericUpDown_hour.Value == 24)
            {
                numericUpDown_hour.Value = 0;
            }
        }

        private void numericUpDown_minute_ValueChanged(object sender, EventArgs e)
        {
            if (numericUpDown_minute.Value == -1)
            {
                numericUpDown_minute.Value = 59;
            }
            else if (numericUpDown_minute.Value == 60)
            {
                numericUpDown_minute.Value = 0;
            }
        }

        string hour = DateTime.Now.ToLocalTime().Hour.ToString();
        string minute = DateTime.Now.ToLocalTime().Minute.ToString();
        bool flag = false;

        private void button_set_Click(object sender, EventArgs e)
        {
            MessageBox.Show("闹钟已设定,请确保音量打开且能正常播放,切勿关闭程序!", "提示");

            hour = Convert.ToInt32(numericUpDown_hour.Value) < 10 ? "0" + numericUpDown_hour.Value.ToString() : numericUpDown_hour.Value.ToString();
            minute = Convert.ToInt32(numericUpDown_minute.Value) < 10 ? "0" + numericUpDown_minute.Value.ToString() : numericUpDown_minute.Value.ToString();
            label_alarmClock.Text = "已设 " + hour + ":" + minute;

            flag = true;
        }
    }
}

查看评论

树莓派3 打造定时播报电台音乐闹钟、天气等

树莓派3 打造定时播报电台音乐闹钟、天气等 参考网址:http://sjtuah.blogspot.com/2017/04/blog-post_23.html 一、准备工作 1、生气和风天气key...
  • wangdamingll
  • wangdamingll
  • 2017年08月22日 14:52
  • 259

利用C#语言实现小闹钟

本图文主要是15级团队学习成果的汇报“ 利用C#语言实现小闹钟”。
  • LSGO_MYP
  • LSGO_MYP
  • 2016年11月13日 12:04
  • 983

闹钟小程序(C#源码)

子丰无聊的时候就随便写了一个闹钟小程序AlarmClock,界面比较简陋,但是基本实现了一个闹钟的功能。下面简单介绍一下AlarmClock,并贴出源码的下载地址。 1. 运行之后的界面 ...
  • softimite_zifeng
  • softimite_zifeng
  • 2016年11月14日 11:09
  • 3604

学习使用Cocos制作《闹钟》

学习使用Cocos制作《闹钟》 SweetLover2015-03-02 09:58:3510311 次阅读 1.安装环境搭建:VS2013 + Cocos v2.1 (1)安装VS2013 下...
  • SweetLoveFT
  • SweetLoveFT
  • 2015年05月19日 23:49
  • 1507

Android-闹钟制作、手机消息推送

在日常生活中,人们都离不开手机了,闹钟也是一个不可或缺的工具,手机有系统自带的闹钟,但这种的闹钟关闭得却非常地容易,而我们想要的是一个真正有效用性的闹钟,所以就写了个一个自定义的闹钟,以满足各种需求....
  • qq_32904839
  • qq_32904839
  • 2017年02月17日 23:03
  • 276

51单片机之闹钟制作

#include sbit Key0=P2^0; //  控制开关 sbit Key1=P2^1;   // 控制调节的变量 sbit Key2=P2^2; //  增加 sbi...
  • qq_21792169
  • qq_21792169
  • 2015年09月30日 21:56
  • 3695

【JS】:JS做的一个闹钟

直接给源码,么么哒 function startTime() { var today=new Date() var h=today.getHours() var m=today.getMinute...
  • qq_23100787
  • qq_23100787
  • 2016年04月11日 18:20
  • 1493

用C语言实现的闹钟程序

 #include #include #include #include #include void main() { int gd=DETECT,gm; int x=320,y=240,r=200,...
  • halfstudio
  • halfstudio
  • 2007年06月13日 21:33
  • 1888

简单实现一个闹钟APP

.....
  • qq_37466011
  • qq_37466011
  • 2017年02月24日 11:47
  • 1272

js写的闹钟,支持多个闹钟

因为玩一个游戏,该游戏可以支持多个号,每个号有好多等时间的任务。 来回切换看,太耽误时间。手机的闹钟操作太麻烦。   所以写了一个使用配置文件的闹钟,简单方便。 var ForReading = 1,...
  • leinchu
  • leinchu
  • 2015年09月14日 10:33
  • 2184
    个人资料
    持之以恒
    等级:
    访问量: 1万+
    积分: 653
    排名: 7万+
    访客统计
    Free counters!

    Started From 2017-10-30

    博客专栏
    最新评论